Retourner aux forums || Retourner au forum

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

Posté par Uld (page perso, ) le 29 janvier 2006
0
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???

--
Ubuntu is an ancient african word meaning : "I can't configure Debian".
> Lire le message (4 commentaires, moyenne: 4,8).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

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

solutions betes ...

Posté par Moun's (page perso, ) le 29/01/2006 à 23:47. (lien). É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 Twidi (Jabber id, page perso, ) le 30/01/2006 à 01:47. (lien). É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 Twidi (Jabber id, page perso, ) le 30/01/2006 à 01:49. (lien). É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;

    • [^]Re: IF

      Posté par Uld (page perso, ) le 30/01/2006 à 09:05. (lien). Évalué à 2.

      Génial, merci pour ton aide, ca marche parfaitement.

      --
      Ubuntu is an ancient african word meaning : "I can't configure Debian".

Revenir en haut de page || Retourner aux forums || Retourner au forum