Альтернатива нескольких строк для RAND ()

У меня возникают проблемы с моим запросом на выбор 100 случайных строк из базы данных с 50 тыс. Строк.

Сначала я использовал только функцию RAND (), но это стало слишком медленным.

Теперь я использую этот запрос:

$query = mysql_query("SELECT t1.* FROM users AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM users WHERE picture != '' && age <= 50 && age >= 18 && username != '')) AS id) AS t2 WHERE picture != '' && age <= 50 && age >= 18 && username != '' && t1.id >= t2.id LIMIT 100"); while($q = mysql_fetch_assoc($query)) { echo $q['id'].'<br>'; } 

Но иногда это дает кучу пустых строк.

Может ли кто-нибудь сказать мне, что происходит не так?

Благодаря!

UPDATE Я тоже пытаюсь выполнить этот запрос, но это дает мне ошибку.

 $query = mysql_query("SELECT id FLOOR(1 + RAND() * x.m_id) 'rand_ind' FROM users (SELECT MAX(t.id) - 1 'm_id' FROM users t) x WHERE picture != '' && age <= 50 && age >= 18 && username != '' ORDER BY rand_ind LIMIT 100"); 

mysql_fetch_assoc (): предоставленный аргумент не является допустимым ресурсом результата MySQL

Рандомизируйте заказ с помощью RAND (), а затем просто выберите предел 0,100

order by rand() limit 0,100

Самый быстрый способ сделать это в mysql

Вы можете прочитать это для альтернатив http://jan.kneschke.de/projects/mysql/order-by-rand/. Существуют некоторые ограничения для того, чтобы сделать это способами, предложенными в этой статье, хотя

Если ваш идентификатор в таблице последователен, почему бы просто не генерировать случайные числа x между 0 и «max_rows».

Затем сделайте что-нибудь вроде

'SELECT ... FROM .... WHERE id in (' . implode(',', $randomNumbers) . ')';

Он вернет строки сгенерированными идентификаторами.

Вы можете использовать:

 SELECT ... FROM ... LIMIT $rand,100 

Где $rand – случайное сгенерированное число (0-50k) с кодовой стороны