Pour faire une sélection aléatoire dans mysql on peut combiner la fonction rand() et la clause order by.
Sélection aléatoire d'une ligne
La requête sql suivante sélectionne une ligne au hasard dans la table MA_TABLE :
SELECT *
FROM MA_TABLE
ORDER BY RAND( )
LIMIT 1
Performances
La requête précédente est certes bien pratique mais je dois vous avertir qu'elle n'est pas du tout optimisée comme le montre la requête explain suivante :
EXPLAIN SELECT CON_ID
FROM CONTENTS
ORDER BY RAND( )
LIMIT 1;
Extra : Using index; Using temporary; Using filesort
On obtient le duo gagnant qui indique une requête SQL non optimisée : Using temporary; Using filesort, vous êtes prévenu.