Requête SQL impossible ?

Eléphanteau du PHP | 15 Messages

13 oct. 2008, 23:11

Bonjour,

Est-il possible d'effectuer un "ORDER BY" sur le contenu d'une colonne ?

En faite, j'ai une table qui contient une colonne appelé "status" au format "ENUM" avec 3 contenus différents :
- VALIDE
- EN COURS
- TERMINE

Et ma requête actuelle est ainsi :
SELECT * FROM `MaTable` ORDER BY `status` ASC;

Et je voudrais afficher tous les enregistrements de ma table, mais en commençant par ceux qui ont comme status "EN COURS" par exemple.

Après moult recherche je commence à me demander si c'est possible ?

Merci.
Modifié en dernier par Daviwys le 18 oct. 2008, 00:43, modifié 2 fois.

ViPHP
ViPHP | 4039 Messages

14 oct. 2008, 10:01

Un order by sur un champ ENUM réarrange selon l'ordre des options possibles tels que définis dans ton create table (au moment de la création de la table).

Enfin, il me semble, j'ai virtuellement jamais utilisé.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphanteau du PHP | 15 Messages

18 oct. 2008, 00:39

Et bien merci pour ton message ;)

J'en conclu au passage que la réponse est "NON" à ma question.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Eléphant du PHP | 254 Messages

18 oct. 2008, 01:17

Salut,
Si tu veux organiser tes résultats sans forcément suivre l'ordre de ton enum, tu peux toujours faire un UNION

Code : Tout sélectionner

(SELECT * FROM `MaTable` WHERE `status`="EN COURS ") UNION (SELECT * FROM `MaTable` WHERE `status`="VALIDE") UNION (SELECT * FROM `MaTable` WHERE `status`="TERMINE");

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

18 oct. 2008, 09:37

Code : Tout sélectionner

(SELECT * FROM MaTable WHERE status="EN COURS ") UNION (SELECT * FROM MaTable WHERE status="VALIDE") UNION (SELECT * FROM MaTable WHERE status="TERMINE");
Syntaxiquement correct, mais qu'est-ce que c'est lourd !
3 scans complets de la table pour un seul et même traitement ! :sick:

Et puis le SELECT *, c'est mal... :non:

Eléphant du PHP | 254 Messages

18 oct. 2008, 10:49

Oui je sais :oops:

Mais je ne sais pas comment ordonner son enum autrement en une seule requete et sans tenir compte de la structure de la table ... :lol:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

18 oct. 2008, 10:52

Mais au fait, Daviwys, qu'obtiens-tu lorsque tu exécutes ta requête ?
SELECT * FROM MaTable ORDER BY status;

ViPHP
ViPHP | 5924 Messages

18 oct. 2008, 11:19

Utilise ORDER BY FIELD();

Eléphanteau du PHP | 15 Messages

18 oct. 2008, 13:21

Salut et merci pour ces nouveaux post ;)
Mais au fait, Daviwys, qu'obtiens-tu lorsque tu exécutes ta requête ?
SELECT * FROM MaTable ORDER BY status;
elle retourne la liste de tous les enregistrements en triant dans l'ordre de mon "ENUM(VALIDE, EN COURS, TERMINE)" comme ceci :
- 5 enregistremants (VALIDE)
- 2 enregistrements (EN COURS)
- 7 enregistrements (TERMINE)

Quant à "Sékiltoyai", je te remercie "royalement" pour ton post qui correspond exactement à ce que je cherchais !

C'est fantastique de pouvoir utiliser ce type d'option dans les requêtes SQL, mais j'ai beaucoup de mal à les trouver :(

Encore merci à vous tous, et un bon week-end ;)

ViPHP
ViPHP | 5924 Messages

18 oct. 2008, 14:15

Quant à "Sékiltoyai", je te remercie "royalement" pour ton post qui correspond exactement à ce que je cherchais !
De rien :)
C'est fantastique de pouvoir utiliser ce type d'option dans les requêtes SQL, mais j'ai beaucoup de mal à les trouver :(
En fait, il faut beaucoup flanner sur la doc mysql pour les connaître… Même avec une recherche je ne suis pas sur que tu aurais trouvé…

Eléphant du PHP | 422 Messages

21 oct. 2008, 12:30

tu peux également essayer

Code : Tout sélectionner

order by FIND_IN_SET(status,'EN COURS,VALIDE,TERMINE')