MySQL выбирает случайную строку из двух объединенных таблиц - PullRequest
0 голосов
/ 31 января 2012

Я знаю, что есть похожие вопросы, но вот моя реализация для строки быстрого случайного выбора:

SELECT i.id, i.thumb_img, i.af, i.width, i.height
FROM images_detail id
JOIN images AS i ON id.imageid = i.id
WHERE id.imageid >=1
AND id.newsroom =1
AND i.width > i.height
AND id.imageid >= FLOOR( 1 + RAND( ) *23111593 )
LIMIT 1 

Проблема с этим запросом заключается в том, что безразличное выражение RANDOM в id.imageid >= FLOOR( 1 + RAND( ) *23111593 )он всегда возвращает один и тот же идентификатор, почему?Любая помощь, пожалуйста?

Позже редактировать:

Запрос занимает 0,0005 секунд, используя EXPLAIN, он сообщает USING WHERE и 12993 ROWS вернул

Идентификаторыс автоматическим приращением это не 23111593, потому что RAND () возвращает 0.xxxxx, поэтому RAND () * 23111593 возвращает около 12993 строк.Проблема в том, что тот же идентификатор находится сверху, и я не хочу вызывать предложение ORDER BY.

Ответы [ 3 ]

1 голос
/ 31 января 2012

http://www.greggdev.com/web/articles.php?id=6

или используйте

ORDER BY RAND () LIMIT 0,1;

0 голосов
/ 01 февраля 2012

В конце концов я загрузил ВСЕ результаты в массив, сохранил их в кеше и сделал в PHP $key=rand(0,sizeof(array)), а затем использовал их следующим образом array[$key]['property']

0 голосов
/ 31 января 2012

Есть ли в вашей базе данных "imageid", превышающий определенный вами диапазон (1 <= X <= 23111593)? </p>

У вас может быть только одна запись в БД.

(также имейте в виду, что у вас может быть только тот, который действительно соответствует запросу id.newsroom = 1, i.width> i.height и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...