Ein großartiger Beitrag, der mehrere Fälle behandelt, von einfach über Lücken bis hin zu uneinheitlich mit Lücken.
http://jan.kneschke.de/projects/mysql/order- by-rand/
Für die meisten allgemeinen Fälle gehen Sie wie folgt vor:
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
Dies setzt voraus, dass die Verteilung der IDs gleich ist und dass es Lücken in der ID-Liste geben kann. Weitere Beispiele finden Sie im Artikel