Tris particuliers avec MySQL
CrazyCat » 25/ 03/2009 10:03
MySQL
|
Envoyer à un ami |
Fil des commentaires de ce billet
La plupart du temps, on utilise les tris de MySQL en faisant ORDER BY clé ASC (ou DESC), mais on peut aussi vouloir un tri aléatoire ou avec un tri bien précis sur les valeurs d'un champ.
Le tri aléatoire peut s'effectuer en PHP, mais lorsqu'il s'agit de ressortir un enregistrement au hasard il est beaucoup plus économique (en terme de ressources) d'utiliser RAND(). Quant au tri sur des valeurs, la directive FIELD() est très utile et beaucoup plus simple à utiliser que d'essayer de la réaliser en PHP.
Tri aléatoire
Si l'on désire obtenir un seul enregistrement de manière aléatoire en php, il faut créer un recordset et aller prendre un item de manière aléatoire. Heureusement, MySQL permet d'effectuer un tri aléatoire très simplement:
SELECT * FROM `table` ORDER BY RAND() LIMIT 1 OFFSET 0
Tri personnalisé
Cette méthode permet de trier en forçant l'ordre des valeurs d'un champ.
En l'absence de clause order by, les lignes retournées par une requête ne sont pas ordonnées[1].
SELECT * FROM `table` WHERE `id` IN (7,18,84,13,67,54)
La solution est donc d'utiliser la contrainte de tri FIELD()[2] de la manière suivante:
SELECT * FROM `table` WHERE `id` IN (7,18,84,13,67,54) ORDER BY FIELD(`id`,7,18,84,13,67,54)