MySql order by

WRInaute passionné
Bonjour,

J'ai une table avec notement un champs "exclusive" qui a pour valeur Yes ou No et un champs "featured" qui a pour valeur Yes ou No

Je voudrais sortir les éléments de la table, en les classant:
En premier ceux qui ont pour champs "exclusive"=Yes
Puis ceux qui ont pour champs "featured"=No
Puis le reste, le tout classé par champs date descendant et champs hour descandant :)

Bon je supose que ça va donner un truc du genre

Code:
ORDER BY exclusive=yes, featured=yes, date DESC, hour DESC

Bref je ne suis pas sur.

Merci pour votre aide
 
WRInaute accro
Salut, c'est bien l'order by qu'il faut utiliser vu que tu ne veux pas grouper mais juste trier.
Il faut voir comment ton sgbd se comporte face à un ORDER BY (boolean). Il met dans l'ordre NULL,FALSE,TRUE ? Ou l'inverse. Tu fais une petite requête et tu le sauras.

Quand tu le sais, ce sera donc:

ORDER BY exclusive,featured DESC,date DESC, hour DESC

Si c'est inversé:

ORDER BY exclusive DESC,featured,date DESC,hour DESC

Tout dépend de ton test, cela peut être complètement interpreté de façon différente si tu utilises SQLServer, MySQL, Oracle, Postegre, etc...

Il faut être aussi sure que la valeur ne peut pas être mise à null dans le type de la colonne, sinon tu pourras te retrouver avec des résultats NULL en premier ou non.
 
WRInaute passionné
Ok merci YoyoS
Ca marche avec
ORDER BY exclusive DESC, featured DESC, date_input DESC, time_input DESC
:)
Merci beaucoup
 
Nouveau WRInaute
Bonjour,

Si je peux me permettre un conseil d'optimisation, pour tes champs "exclusive" et "featured", à la place de Yes et No, je te conseillerais d'utiliser 1 et 0. Tes champs "exclusive" et "featured" devant être alors des champs numériques (TINYINT suffit largement).

Je ne sais pas si c'est le SGBD que tu utilises, mais je sais par expérience que en MySQL, l'utilisation de champs numériques est nettement plus optimisé et efficace que tout autre type de champs, pour tout ce qui est WHERE et surtout pour les clauses ORDER BY. Et ils présentent de nombreux autres avantages (poids, optimisation des index, souplesse, ...)
 
WRInaute accro
En premier ceux qui ont pour champs "exclusive"=Yes
Puis ceux qui ont pour champs "featured"=No


Attention que tu as dit vouloir l'un à Yes et l'autre à No en premier, donc il ne faut pas mettre DESC pour les 2 champs.

Et pour ARcom je pense que la valeur Boolean n'existe pas, c'est toujours transformé en binaire au final. Je pense même que c'est exactement pareil qu'un TINYINT(1).
 
WRInaute discret
ARcom a dit:
Bonjour,

Si je peux me permettre un conseil d'optimisation, pour tes champs "exclusive" et "featured", à la place de Yes et No, je te conseillerais d'utiliser 1 et 0. Tes champs "exclusive" et "featured" devant être alors des champs numériques (TINYINT suffit largement).

Je ne sais pas si c'est le SGBD que tu utilises, mais je sais par expérience que en MySQL, l'utilisation de champs numériques est nettement plus optimisé et efficace que tout autre type de champs, pour tout ce qui est WHERE et surtout pour les clauses ORDER BY. Et ils présentent de nombreux autres avantages (poids, optimisation des index, souplesse, ...)

+1 8)

Je rajouterai que cette méthode permet aussi de sécurisé l'entrée.
- On vérifie si $va['champ'] est numérique inférieur ou égale à =< 1

Et on est tranquille, rien d'autre que 0 / 1 ne peut passé.

En MySql,
Tout ce que l'ont peu passer en numérique, c'est beaucoup mieux. :)
-> plus simple à contrôlé
-> optimisation de la BDD ( prend moins de place )

Et ça permet aussi de ce concentré sur les parties plus complexes.
On réduit le nombre de zones à risques en quelque sorte.

Donc, que des avantages. :)

"Tout ce que l'ont peu passer en numérique, c'est beaucoup mieux."
C'est l'une des principales règles,
avec aussi "éviter les répétitions" 8)

Par exemple, pour un Post d'un forum, on ne va pas enregistrer dans la BDD à chaque fois le nom de l'utilisateur.
On va juste associer l'ID de l'utilisateur. Avec une table dédiée aux noms des utilisateurs.

Ça permet d'optimiser les tables, et la BDD.
 
Discussions similaires
Haut