2010-02-15 4 views
2

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

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

Спасибо!

+1

Почему вы хотите, чтобы избежать RAND()? –

+1

@astander: потому что он медленный? – zerkms

ответ

3
WHERE `inactive` = 0 LIMIT random_offset, 1 

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

+0

Спасибо! Я полностью забыл, что LIMIT может принимать 2 параметра. – tau

Смежные вопросы