[SQL, PHP] ORDER BY, avec un ordre à moi :P !
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
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 :
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 !
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:
- Order by php
- Easy php - Télécharger - Divers Web & Internet
- By click downloader avis - Forum Enregistrement / Traitement audio
- Files by google - Accueil - Applications & Logiciels
- Expert php pinterest - Télécharger - Langages
- Ads by cooking ✓ - Forum Virus
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'):
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 :
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
J'obtiens :
"ID","motcle","libelle"
4,,"B"
5,"","C"
2,"Lima","L"
3,"Alpha","A"
1,"Whisky","W"
C'est pas magique, ça ?
Cordialement
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
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'
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 !
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 !
En effet, c'est magique. Je plussoie.