Вывод в начало списка трёх случайных позиций из списка приоритетных
Есть таблица (используется MariaDB) со списком товаров. В таблице три поля:
| Имя поля | Описание |
|---|---|
| id | id товара |
| title | название товара |
| id_seller | id продавца |
В этой таблице для каждого id_seller может быть много строк. Есть список продавцов, товары которых всегда должны быть вверху списка. Но - вверху списка должны быть только три случайно выбранных товара от трёх разных продавцов, а остальные товары сортируются в обычном порядке.
Как это реализовать в sql-запросе? Если использовать order by FIELD (id_seller, <список>), то вверху будут все товары всех продавцов из списка, а надо только чтобы три случайных товара трёх случайных продавцов из списка.
Ответы (1 шт):
Исходя из собственного опыта предлагаю разделить задачу на 2 части.
- Процедура вычисления поля сортировки.
- Вывод запроса
Если надо вытащить топ позиций, то надо сделать еще одно поле в таблице товаров для сортировки например topOrderId. В нем менеджер магазина или твоя процедура предварительно определяет позиции которые надо поднять наверх.
Дальше просто сортируешь по этому полю.
select * from Seller s
inner join Products p on s.sallerid = p.sallerid
order by p.topOrderId desc
Менеджеры особенно любят вручную менять это поле, поскольку это дает им возможность гибко управлять продажами.
Если уже есть таблица с приоритетными позициями просто подключи сортировку по ней
select * from Seller s
inner join Products p on s.sallerid = p.sallerid
left join ProductsTop pt on pt.productId = p.productId
order by pt.topOrderId desc