Я знаю, что есть simmilar вопросов там, но здесь `s моя реализация на скоростную случайный выбор строки:MySQL выбрать случайную строку из двух соединенных таблиц
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.
Сколько результатов возвращается, если вы снимаете лимит и раздел RAND в разделе where? – malonso
@malonso Я отредактировал мое сообщение, чтобы включить дальнейшие подробности. Благодаря! – Gabriel
Как насчет распределения изображений? Возможно, у всех изображений есть идентификаторы> 23111593? – bububaba