Forum Programmation.SQL Restreindre le group by dans un requète mysql

Posté par  (site web personnel) .
Étiquettes : aucune
0
30
jan.
2006
Bonjour tout le monde,

alors voilà mon problème, je souhaterais faire une requète mysql dans ce genre:

SELECT id FROM membres ORDER BY rang ASC

L'idée c'est de classer les membres par rang, jusque là OK

Le soucis c'est qu'après je fait un for($i=0;$i<nbr_enregistrement;$i++) et j'aimerai traiter d'abord les rang 1,2,3,n et à la fin seulement les rangs=0.

Soucis: mon ORDER BY rang ASC me colle les rang=0 en premier...

Comment faire donc pour traiter mes enregistrement par rang croissant mais rang 0 en dernier seulement???
  • # solutions betes ...

    Posté par  (site web personnel) . Évalué à 5.

    cas 1 : en faisant 2 requetes
    genre : SELECT id FROM members WHERE rang > 0 ORDER BY rang ASC;
    puis : SELECT id FROM members WHERE rang = 0;

    cas 2 : en gérant une pile
    version pseudo-PHP :
    SELECT id FROM membres ORDER BY rang ASC
    $rang_0 = array();
    for( $i=0 ; $i < $nb_reg ; $i++ ) {
    if ( $enregistrement["rang"] == 0 ) {
    $rang_0[] = $enregistrement;
    } else {
    # cas general
    }
    }
    foreach ( $rang_0 as $enregistrement ) {
    # traitement rang 0
    }
  • # IF

    Posté par  (site web personnel) . Évalué à 3.

    SELECT id, IF(rang=0, 1, 0) AS rangnonzero, ordre FROM membres order by rangnonzero, rang;


    Aide sur la fonction if :
    http://dev.mysql.com/doc/refman/5.0/fr/control-flow-function(...)
    • [^] # Re: IF

      Posté par  (site web personnel) . Évalué à 9.

      C'est bien sur "rang" et pas "ordre"... il s'agit d'un reste de mon test, désolé.
      La bonne requête :

      SELECT id, IF(rang=0, 1, 0) AS rangnonzero, rang FROM membres order by rangnonzero, rang;

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.