[SQL] tri dans une requette

tri dans une requette [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 29-04-2009 à 14:22:08    

bonjour,

 

je souhaite faire un tri dans une requette comme ci dessous

 
Code :
  1. SELECT prenom1,prenom2,note1,note2 FROM base WHERE **** ORDER BY a="Bernard",b="Bernard"
 

et ensuite faire un tri sur les notes1 pour les "Bernard" de prenom1 et un tri sur les notes2 pour les "Bernard" de prenom2  :

 

bernard1 pierre1    note1=14 note2=9
bernard1 pierre1    note1=12 note2=17
bernard1 marc2     note1=10 note2=5
jean1      bernard2 note1=9   note2=15
eric1       bernard2 note1=14 note2=9

 

tout ce que j'ai réussi à faire c'est :

 
Code :
  1. SELECT prenom1,prenom2,note1,note2 FROM base WHERE **** ORDER BY a="bernard",b="bernard",note1 DESC,note2 DESC
 

et j'obtiens alors :

 

eric1       bernard2 note1=14 note2=10
bernard1 pierre1    note1=14 note2=9
bernard1 pierre1    note1=12 note2=17
bernard1 marc2     note1=10 note2=5
jean1      bernard2 note1=9   note2=15

 

voiloù si yen a qui ont compris mon délire et possède la solution merçi bcp de m'aider :hello:

  



Message édité par reglisse le 29-04-2009 à 14:27:05
Reply

Marsh Posté le 29-04-2009 à 14:22:08   

Reply

Marsh Posté le 29-04-2009 à 14:24:12    

un truc comme ça devrait le faire :  

Code :
  1. SELECT prenom1,note1 FROM base WHERE prenom1='bernard' ORDER BY note
  2. UNION
  3. SELECT prenom2,note2 FROM base WHERE prenom2='bernard' ORDER BY note


---------------

Reply

Marsh Posté le 29-04-2009 à 14:44:19    

le problème c'est que je souhaite limiter à 10 le nombre de résultat pour faire une pagination ( limit $db,0 )
 

Reply

Marsh Posté le 29-04-2009 à 14:47:31    

Citation :

To use an ORDER BY or LIMIT clause to sort or limit the entire UNION result, parenthesize the individual SELECT statements and place the ORDER BY or LIMIT after the last one. The following example uses both clauses:
 
(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2)
ORDER BY a LIMIT 10;


 
 
maintenant, tu peux faire du ménage dans ta base de données, que je retroue mon podium d'oc en % :d


---------------

Reply

Marsh Posté le 29-04-2009 à 14:57:14    

oki merçi bcp ;) tu m'as donné du boulot  
 
 
j'ai fait du ménage malgré tout tu ne repasse pas premier dsl :D

Reply

Marsh Posté le 29-04-2009 à 15:04:21    

non, mais il y avait  des 166@4000   , maintenant c'est mieux :d
edit : et puis il faudrait que je le ressorte le p4A un jour ou je m'ennuie


Message édité par flo850 le 29-04-2009 à 15:04:50

---------------

Reply

Marsh Posté le 30-04-2009 à 09:39:56    

finalement j'ai fait ça :
 
base contient les champs prenom1,prenom2,note1,note2
   

Code :
  1. (SELECT prenom1,note1 FROM base WHERE prenom1='bernard' ORDER BY note1) UNION (SELECT prenom2,note2 FROM base WHERE prenom2='pierre' ORDER BY note2) Limit 0,10


 
espérant avoir d'abord les prenom1 triés par les note1, puis les prenom2 triés par les note2 mais en fait le tri ne passe pas ! j'ai seulement les prenoms1 puis les prenom2 mais par triés comme je veux

Reply

Marsh Posté le 30-04-2009 à 12:01:55    

union agrège et donc un effet de bord est qu'il trie, le plus sur est
 

Code :
  1. select prenom,note,ordre
  2. from
  3. (SELECT prenom1 as prenom,note1 as note,1 as ordre
  4. FROM base
  5. WHERE prenom1='bernard' 
  6. UNION ALL
  7. SELECT prenom2,note2,2 as ordre
  8. FROM base
  9. WHERE prenom2='pierre')
  10. order by ordre, note, prenom
  11. Limit 0,10


 
et j'ai encore oublié la syntaxe de la balise sql

Reply

Marsh Posté le 30-04-2009 à 15:46:44    

merci pour ta réponse j'ai essayé ça mais j'aimerai classé les 'pierre' par les 'note2' et cela ne passe pas ça reste classé par 'note'
 
à mon avis c'est pas possible avec une seul requête...


Message édité par reglisse le 30-04-2009 à 15:53:06
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed