Задать вопрос
SimBioT19
@SimBioT19
{{ user.about }}

Как решить проблему с выборкой?

Я использую данный запрос для выбора 14 случайных записей:
"SELECT r1.name FROM `objects` AS r1 JOIN (SELECT CEIL(RAND() * (SELECT MAX(id) FROM `objects`)) AS id)  AS r2 WHERE r1.id >= r2.id  ORDER BY r1.id ASC LIMIT 14

Проблема вот в чём заключается: если записей всего 100 и данный "код" RAND() * (SELECT MAX(id) FROM `objects`) вернёт 98 то естественно выберется только 2 записи, вместо 14 требуемых, а нужно всегда 14.
Также обращаю внимание, что записей не 100, а лишь максимальный id равен 100, т.е. такой принцип SELECT MAX(id)-14 не подходит.

Каким должен быть запрос, чтобы всегда выбиралось 14 случайных записей?
  • Вопрос задан
  • 120 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
unitby
@unitby
Нужно 14 записей подряд начиная со случайного?
Ответ написан
а не проше ли в данном случае с помощью php взять 14 случайных чисел из диапазона, а потом просто вытащить из из бд?
Ответ написан
mahoho
@mahoho
Full stack certified PHP developer.
Уберите JOIN и добавьте
ORDER BY RAND() LIMIT 14;
Ответ написан
Комментировать
deniamnet
@deniamnet
New Yorker, web developer
Обращаю ваше внимание на то, что ORDER BY RAND() нереально медленная вещь на большом кол-ве записей.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы