Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1323 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1996643
pat84000
Posté le 28-05-2010 à 05:19:47  profilanswer
 

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 d’aujourd’hui comme critère
 
exemple de tri que je voudrais obtenir en considérant que la date d’aujourd’hui est le 10/05/29

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


 
ma requete d’exemple:
 
(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 s’effectue pas dans chaque SELECT
 
Merci pour votre aide

mood
Publicité
Posté le 28-05-2010 à 05:19:47  profilanswer
 

n°1996678
deliriumtr​emens
sic transit intestinal...
Posté le 28-05-2010 à 09:56:54  profilanswer
 

Question à 2 sous :
Tu es déjà sûr qu'il comprend bien ton format de date ?  
Je suppose que oui (j'aurais mis un DATE_FORMAT, mais c'est pas la question).
 
 
Quant au fonds de ta question :
 
Il y a des subtilités sur les UNION et les ORDER BY : voir ici
 
En gros

Citation :

However, use of ORDER BY for individual SELECT statements implies nothing about the order in which the rows appear in the final result because UNION by default produces an unordered set of rows. Therefore, the use of ORDER BY in this context is typically in conjunction with LIMIT, so that it is used to determine the subset of the selected rows to retrieve for the SELECT, even though it does not necessarily affect the order of those rows in the final UNION result. If ORDER BY appears without LIMIT in a SELECT, it is optimized away because it will have no effect anyway.


 
Donc, si tu veux faire des tris à l'intérieur des requêtes liées par un UNION, tu es obligé de mettre un "LIMIT" dans chacune de tes requêtes, sinon il s'en fout royalement à l'affichage (et dans ton cas, ça fait un effet de bord marrant, puisque la première requête est quand même triée).
 
Testé et approuvé.
(j'ai mis n'importe quoi dans le LIMIT, ce qui n'est pas terrible, mais a priori on n'a pas trop le choix).


Message édité par deliriumtremens le 28-05-2010 à 10:00:08
n°1999425
pat84000
Posté le 07-06-2010 à 03:12:36  profilanswer
 

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 

Sujets relatifs
comment changer la couleur de la balise select?Creation d'une liste a partir d'un select
[Résolu] Tri personnalisé avec "order by"Socket, select, class héritage
select : deux références sur une même tableSelect distinct SQL
requete mysql order by sur 2 tables[Résolu][SQL/ACCESS] Problème COUNT / GROUP BY
Problème select max mysqlselect concaténation
Plus de sujets relatifs à : Comment faire 2 tris différents ORDER BY dans chaque SELECT avec UNION


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR