Aller au contenu

Comment faire 2 tris différents ORDER BY dans chaque SELECT avec un UNION


pat84000

Sujets conseillés

Salut a tous j'aurais besoin d'une aide

Comment faire 2 tris différents ORDER BY dans chaque SELECT avec un UNION

je m'explique

j'ai une table (MYSQL 5.0.44) qui contient des annonces d'évènement classes par date

je voudrais les afficher cette liste dévènements par

- 1er tri : Les évènements a venir du plus récent au plus futur

- 2eme tri : Les évènements qui ont eu lieu du plus récent au plus vieux

avec la date daujourdhui comme critère

exemple de tri que je voudrais obtenir en considérant que la date daujourdhui est le 10/05/29

titre_event | date_event
événement 4 | 10/05/29
événement 5 | 10/05/30
événement 3 | 10/05/31
événement 2 | 10/05/28
événement 1 | 10/05/27

ma requete dexemple:

(SELECT titre_event, date_event from tab_event

WHERE date_event >= '10/05/29'

ORDER BY date_event ASC)

UNION

(SELECT titre_event, date_event from tab_event

WHERE date_event < '10/05/29'

ORDER BY date_event DESC)

LIMIT 0, 100

Actuellement le résultat est que le tri ne seffectue pas dans chaque SELECT

Merci pour votre aide

Lien vers le commentaire
Partager sur d’autres sites

(SELECT 1 as tri,titre_event, date_event from tab_event 
WHERE date_event >= '10/05/29')
UNION
(SELECT -1,titre_event, date_event from tab_event
WHERE date_event < '10/05/29'
)
ORDER BY tri DESC,tri * date_event
LIMIT 0, 100

Jacques.

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

(SELECT 1 as tri,titre_event, date_event from tab_event 
WHERE date_event >= '10/05/29')
UNION
(SELECT -1,titre_event, date_event from tab_event
WHERE date_event < '10/05/29'
)
ORDER BY tri DESC,tri * date_event
LIMIT 0, 100

Jacques.

Salut Jacques

merci pour ta solution

elle fonctionne a merveille

Modifié par pat84000
Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

(SELECT 1 as tri,titre_event, date_event from tab_event 
WHERE date_event >= '10/05/29')
UNION
(SELECT -1,titre_event, date_event from tab_event
WHERE date_event < '10/05/29'
)
ORDER BY tri DESC,tri * date_event
LIMIT 0, 100

Jacques.

Ok j'ai compris le critere "tri * date_event," mets la date en valeur negative ce qui nous fait un tri DESC pour le 2eme SELECT

Modifié par pat84000
Lien vers le commentaire
Partager sur d’autres sites

Ben un tri sur X desc c'est la même chose qui tri sur -X asc. Donc si tu veux changer d'ordre de tri, dans un cas tu multiplies par 1 et dans l'autre cas par -1...

Jacques.

Lien vers le commentaire
Partager sur d’autres sites

ok exact, j'avais l'affichage de la colonne pour mieux comprendre

(SELECT 1 as tri, 1 * date_evenement  AS tri2, tid, date_evenement from ipboard_topics
WHERE date_evenement >= '2010/05/29' AND forum_id =409
)
UNION
(SELECT -1, -1 * date_evenement AS tri2,tid, date_evenement from ipboard_topics
WHERE date_evenement < '2010/05/29' AND forum_id =409
)
ORDER BY tri DESC,tri * date_evenement
LIMIT 0, 100

pendant que tu me repondais j'avias un edit sur le post precedent

en tout cas merci j'avais poster ce problème sur d'autres forum et il a eu de réponse aussi performante que la tienne

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...