Случайная строка MySQL, избегая дыр - PullRequest
2 голосов
/ 15 февраля 2010

У меня большая таблица пользователей MySQL, и мне нужно получить шесть случайных строк из нее (я использую PHP). В таблице есть столбец индекса, который автоматически увеличивается. Единственная проблема заключается в том, что некоторые строки помечены как неактивные, потому что некоторые пользователи отключили свои учетные записи или что-то еще. Это означает, что я не могу просто посчитать строки и затем выбрать случайное число из этого диапазона, потому что некоторые из них будут неактивными.

Как эффективно получить случайную строку, не используя RAND () и не пытаясь запросить неактивного пользователя?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 15 февраля 2010
WHERE `inactive` = 0 LIMIT random_offset, 1

, где random_offset предварительно рассчитывается в PHP (случайным образом от 1 до COUNT активных пользователей) И результат состоит из 6 UNION ed запросов.

1 голос
/ 15 февраля 2010

Если вы хотите избежать очень медленного порядка с помощью метода RAND (), вот несколько альтернатив, с различными вариантами управления дырами

быстрый выбор случайной строки из большой таблицы в mysql

...