@liza2019

Как из БД выбрать товар рандомно?

Как составить запрос к базе, чтобы выбрать рандомно товар?
К примеру, есть слово "горошек", в базе есть куча товара у которого встречается слово "горошек". Надо рандомно каждый раз при заходе на страницу выбирать из всего этого товара определенное количество.
К примеру есть товар:

Горох колотый 900г*14
Горох"Мистраль"колотый 500г*12
Горошек "Хайнц" зелёный
Горошек зеленый "6 Соток" 425мл*12
Горошек зеленый "Кубаночка" ст/б 460г*12
Горошек Зеленый "Барко" 200г*15 ж/б

При заходе на страницу выбирает 2 товара:

Горошек зеленый "6 Соток" 425мл*12
Горошек Зеленый "Барко" 200г*15 ж/б

При следующем заходе выбирает к примеру:

Горох"Мистраль"колотый 500г*12
Горошек "Хайнц" зелёный

И так далее, то есть из всей кучи товара каждый раз выбирать рандомно разные.
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 2
New_Horizons
@New_Horizons
Бред:
Самое просто order by rand()
но с производительностью тут не всё гладко
Оптимизация ORDER BY RAND()
Ответ написан
erge
@erge
Примус починяю
По мотивам New_Horizons

SELECT p.* FROM product p
  JOIN ( SELECT rand() * (SELECT max(id) FROM product WHERE p.name LIKE 'Горо%') AS max_id ) AS m
  WHERE p.id >= m.max_id
    AND p.name LIKE 'Горо%'
ORDER BY p.id ASC LIMIT 1;


про p.name LIKE 'Горо%'

1. в подзапросе выбирается максимальный ID для товаров с соответствующим названием, т.к. если не ограничивать то выберется в принципе максимальный ID, а он может быть больше максимального ID нужного товара и если он выпадет в рандоме, то не выберется ничего.
2. при выборе по ID >= рандомного max_id, ограничиваем выборку по нужному товару условием.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы