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)

Notes

[1] Toutefois, dans les faits, mysql affiche les lignes dans l'ordre de leur création

[2] Notez que la parenthèse est collée au mot FIELD sous risque d'obtenir une erreur: #1305 - FUNCTION base.field does not exist