単純なものからギャップ、ギャップのある不均一なものまで、いくつかのケースを処理する優れた投稿。
http://jan.kneschke.de/projects/mysql/order- by-rand /
最も一般的なケースでは、次のようにします。
SELECT name
FROM random AS r1 JOIN
(SELECT CEIL(RAND() *
(SELECT MAX(id)
FROM random)) AS id)
AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 1
これは、IDの分布が等しく、IDリストにギャップがある可能性があることを前提としています。より高度な例については、記事を参照してください