Ett bra inlägg som hanterar flera ärenden, från enkla, till luckor, till olikformiga med luckor.
http://jan.kneschke.de/projects/mysql/order- by-rand/
För de flesta allmänna fall, så här gör du:
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
Detta förutsätter att fördelningen av id är lika och att det kan finnas luckor i id-listan. Se artikeln för mer avancerade exempel