[SQL, PHP] ORDER BY, avec un ordre à moi :P !

Résolu/Fermé
Utilisateur anonyme - 28 juin 2011 à 21:38
 Utilisateur anonyme - 6 juil. 2011 à 14:35
Bonjour tout le monde !

Comment faire un ordre personnalisé en SQL ?
En fait j'ai un champ de type SET, avec 3 valeurs "alphabétiques",
J'aimerai trouver une façon de dire à SQL :

En premier les résultats avec SET="Lima", puis avec SET="Alpha", puis avec SET="Wisky", puis enfin tout les autres.

J'ai bien sessayer avec GROUPED BY, mais cela les groupe seulement, pas organise selon mes critères (?), ou faire trois demande SQL distinctes, puis utiliser PHP, mais bon...

Donc savez-vous s'il existe une telle façon, en SQL ?
Merci d'avance !
A voir également:

4 réponses

Si tu veux trier dans un ordre différent des valeurs du SET et que tu peux créer ne fonction, je te propose cette requête qui utilise une fonction personnalisée (ma table s'appelle 'lettre'):
SELECT * FROM lettres  order by monordre(motcle)

J'avais créé une colonne de type SET avec Lima,Alpha et Whisky et si je veux avoir l'ordre Whisky, Lima, Alpha et les autres (null ou vide) j'ai créé la fonction :
CREATE FUNCTION monordre (valeur VARCHAR(10)) RETURNS INT
 DETERMINISTIC
BEGIN
	DECLARE return_value INT;
  IF (valeur = 'Whisky') THEN
    SET return_value = 0;
  ELSEIF (valeur = 'Lima') THEN
    SET return_value = 1;
  ELSEIF (valeur = 'Alpha') THEN
    SET return_value = 2;
  ELSE  SET return_value = 1000;
  END IF;
	RETURN return_value;
END

Avec ça j'obtiens bien :
"ID","motcle","libelle"
1,"Whisky","W"
3,"Alpha","A"
2,"Lima","L"
4,,"B"
5,"","C"
alors que si je fais
SELECT * FROM lettres order by motcle

J'obtiens :
"ID","motcle","libelle"
4,,"B"
5,"","C"
2,"Lima","L"
3,"Alpha","A"
1,"Whisky","W"
C'est pas magique, ça ?
Cordialement
1
Bonjour,

En effet, c'est magique. Je plussoie.
0
Bonjour

SELECT * FROM TBL WHERE nom='Lima' UNION SELECT * FROM TBL WHERE nom='Alpha' UNION SELECT * FROM TBL WHERE nom='Wisky' UNION SELECT * FROM TBL WHERE nom <> 'Lima' and nom <> 'Alpha' and nom <> 'Wisky'
0
Je viens de remarquer (j'avais lu trop vite) que tu parlais d'un champ SET.
Un simple 'ORDER BY' devrait suffire, à condition d'avoir défini le SET dans le bon ordre, évidemment. Si ton SET est déjà défini et que tu ne veux pas le modifier, la requête ci-dessus devrait marcher, elle.
0
Utilisateur anonyme
4 juil. 2011 à 14:47
Oho ! Je vais tester ça !! Merci d'avoir répondu !
0
Utilisateur anonyme
6 juil. 2011 à 14:35
Bonjour... Re-bonjour plutôt !
Java4ever, ta technique est splendide et compréhensible à souhait, mais juste un peu longue. J'ai donc préféré le UNION du père (merci à toi), en mettant entre parenthèses les 3 requêtes SELECT. ORDER BY ne fonctionnait pas, il remettait tout dans l'ordre, non séparément. J'ai donc utilisé GROUP BY est ça marche super !

Merci à vous deux !
A bientôt !
0