Un petit truc en MySQL qui j'en suis sûr servira à plus d'un.
Pour California Apparel News, cela fait plusieurs fois que j'utilise cette technique qui marche à merveille.
Le problème est le suivant : Comment récupérer les 10 derniers ajouts d'une table mais triés par ordre alphabétique ?
La solution qui vient tout de suite à l'esprit est :
SELECT * FROM table ORDER BY date DESC, titre ASC LIMIT 0,10
On récupère bien les 10 derniers résultats, mais ils ne sont en aucun cas triés par ordre alphabétique. En effet, le tri se fait d'abord sur la date dans l'ordre décroissant, puis sur le titre. Le tri sur le titre ne sera effectif que si on a des éléments à la même date. Un exemple de ce qui pourrait sortir de cette requête est :
- 11/01/2008 - Il fait beau à Los Angeles
- 09/01/2008 - Nuageux mais pas froid à LA
- 03/01/2008 - Il pleut à Los Angeles
- 03/01/2008 - Tempête sur Los Angeles
(Bon que 4 résultats, je ne me souviens pas d'autres choses niveau météo ici)
On a les bons résultats, mais pas triés correctement. Alors c'est sûr, on pourrait écrire une fonction PHP pour trier les résultats et c'est bouclé. Mais une fonction de tri n'est jamais évidente à écrire et trier dès la requête augmentera les performances.
La solution est d'utiliser une sous-requête dans la clause FORM; la sous-requête récupèrera les 10 derniers résultats, la requête principal les triera par ordre alphabétique. La requête complète :
SELECT * FROM (SELECT * FROM table ORDER BY date DESC LIMIT 0,10) AS subSelect ORDER BY titre ASC
Noter le AS subSelect qui est indispensable, comme indiquée dans la doc.
Le résultat sera :
- 11/01/2008 - Il fait beau à Los Angeles
- 03/01/2008 - Il pleut à Los Angeles
- 09/01/2008 - Nuageux mais pas froid à LA
- 03/01/2008 - Tempête sur Los Angeles
La différence entre les 2 résultats est minime, mais vous avez compris !
Nous voilà donc avec nos résultats tout bien trié comme on le voulait !
J'ai utilisé ça à 2 endroits :
- Trends pour le menu déroulant
- Fashion Slideshow pour le menu déroulant aussi
En espérant que vous aurez l'occasion d'utiliser cette petite technique qui gagne du temps.
Commentaires.
#1 par Screu
J'ai bien fait de passer faire un tour ici moi !
Merci pour cette astuce qui me servira à coup sûr !
le Vendredi 18 Janvier 2008 à 14:36:52
#2 par paramoteur
Merci pour cette ruse !
le Dimanche 03 Février 2008 à 12:37:35
#3 par Funkyphenix
Merci pour l'astuce... !
le Samedi 10 Mai 2008 à 00:07:54
#4 par loicb
Tu me sauve la vie, merci beaucoup!
le Mardi 05 Juin 2012 à 16:58:24
Ajouter un commentaire.