Świetny post obsługujący kilka spraw, od prostych, przez luki, po niejednolite z lukami.
http://jan.kneschke.de/projects/mysql/order- losowo/
W większości przypadków, oto jak to zrobić:
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
Zakłada to, że rozkład identyfikatorów jest równy i że na liście identyfikatorów mogą występować luki. Zobacz artykuł, aby uzyskać bardziej zaawansowane przykłady