Page 1 sur 1

Problème avec un order

Posté : 21 août 2012, 12:06
par foetus69
Bonjour,

J'ai des événements tout au long de l'année et je voudrais afficher via la même requête les événements du mois en cours.

Exemple :

événement A d'aout à novembre
événement B de mars à novembre
événement C de janvier à décembre
événement D de mars à décembre
événement E d'aout à décembre
événement F de septembre à octobre

Comme on est en août, j'aimerai afficher en premier les événements du mois d'août sans pour autant ne pas afficher celles qui sont encore actives.

Mon affichage serait du coup un truc du genre A, E puis le reste C, B, D (pas F car on est pas en septembre).

Est-ce possible en une seule requête ? Vous avez une idée du comment faire. Je pense qu'il faut agir sur l'ORDER BY et encore...

Par avance merci de votre aide.

Tite fée !

Re: Problème avec un order

Posté : 21 août 2012, 12:13
par Zahnzao
Salut,

Sans un exemple de requête ou un minimum d'infos sur tes tables ça va pas être facile de t'aider.

Comment sont stockées tes dates ?

T'as déjà essayé quelque chose ? Montre nous.

Re: Problème avec un order

Posté : 21 août 2012, 14:09
par foetus69
Coucou et merci à toi.

Non rien de concret pour le moment j'essaie de conceptualiser.

Je stocke ma date de début et date de fin sous cette forme YYYYMMDD et j'utilise les timestamp

Si je reprends mon exemple pour cette année ça donne :

événement A du 20120801 à 20121130
événement B du 20120301 à 20121130
événement C du 20120101 à 20121231
événement D du 20120301 à 20121231
événement E du 20120801 à 20121231
événement F du 20120901 à 20121031

Le truc c'est que je peux récupérer les bonnes infos mais les trier c'est autre chose car de ce que j'en vois toutes les conditions seront toujours vérifiées...

select * from matable where debut < 20120821 and fin > 20120821 order by ..? Si je mets debut j'aurai en premier ceux de janvier, etc...

La date du jour sera toujours supérieur à la date de début de l'événement et toujours inférieur à la date de fin grrrr #-o

Tu vois ce que je veux dire ? On est en aout bah je voudrais afficher d'abord aout puis le reste depuis janvier sans F qui lui commence en septembre.

:-k

Re: Problème avec un order

Posté : 21 août 2012, 14:37
par Mazarini
Avant de vouloir trier les événements, il faut les sélectionner. Ensuite on verra comment les triés.
Tu as fait le select ?

Re: Problème avec un order

Posté : 21 août 2012, 16:15
par foetus69
Salut Mazarini, tu vas bien ?

J'ai fait une requête assez simple :

select id, titre,debut,fin from events where debut <= 20120821 and fin >= 20120821 order by id

après s'il faut passer par 2 requêtes car impossible qu'il en soit ainsi ^^

Re: Problème avec un order

Posté : 21 août 2012, 18:26
par Zahnzao
Tu postes dans la section php, ton appli est en php ?

Re: Problème avec un order

Posté : 21 août 2012, 19:23
par sadeq
Bonjour, voici un exemple qui réalise ta requête:

Soit la table source nommée : 't_events'
--
-- Structure de la table `t_events`
--

CREATE TABLE IF NOT EXISTS `t_events` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `titre` varchar(255) NOT NULL,
  `debut` date NOT NULL,
  `fin` date NOT NULL,
  PRIMARY KEY (`id`)
) ;

--
-- Contenu de la table `t_events`
--

INSERT INTO `t_events` (`id`, `titre`, `debut`, `fin`) VALUES
(1, 'événement A', '2012-08-01', '2012-11-30'),
(2, 'événement B', '2012-03-01', '2012-11-30'),
(3, 'événement C', '2012-01-01', '2012-12-31'),
(4, 'événement D', '2012-03-01', '2012-12-31'),
(5, 'événement E', '2012-08-01', '2012-12-31'),
(6, 'événement F', '2012-09-01', '2012-10-31');
Voici la requête qui liste les événements concernant aujourd'hui, classés par ordre des plus récents.
SELECT id, titre, debut, fin
FROM t_events
WHERE debut <= now( )
AND fin >= now( )
ORDER BY debut DESC , fin ASC
En voici le résultat:
id --- titre ------------ debut ------------- fin
1 --- événement A --- 2012-08-01 --- 2012-11-30
5 --- événement E --- 2012-08-01 --- 2012-12-31
2 --- événement B --- 2012-03-01 --- 2012-11-30
4 --- événement D --- 2012-03-01 --- 2012-12-31
3 --- événement C --- 2012-01-01 --- 2012-12-31
Voila, le jour d'aujourd'hui est le point central de la liste des segments de temps représentant les événements.
dC <-- dD/dB <--- dE/dA <-- Aujourd'hui --> fA/fB --> fE/fD/fC

:wink: