powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сортировка по максимальному количеству вхождений в IN
5 сообщений из 5, страница 1 из 1
Сортировка по максимальному количеству вхождений в IN
    #39319292
korinf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть 3 таблицы. Продукты, рецепты, и связь продуктов с рецептами.

product
idname1соль2молоко3сметана

recept
idname1блины2каша3пирог

product_to_recept
idproduct_idrecept_id111221322

Я ищу рецепты, по продуктам.
Код: plsql
1.
2.
3.
4.
5.
6.
SELECT * 
FROM product_to_recept as ptr
LEFT JOIN recept ON recept.id = ptr.recept_id
WHERE ptr.product_id IN (12,3,4)
GROUP BY ptr.recept_id
LIMIT 10



но такой запрос вернет мне все рецепты где встречаются продукты с id 12,3 или 4.

Возможно ли как то отсортировать результат запроса, таким образом, чтобы самые первые были рецепты, в которых есть максимальное вхождение по id продуктов? То есть, я бы хотел чтобы сперва шли рецепты в которых есть все 3 продукта (12,3,4) затем шли рецепты где есть 2 продукта (12,3) (12,4) (3,4), затем чтобы шли рецепты в которых встречается 1 продукт (12 или 3 или 4).
...
Рейтинг: 0 / 0
Сортировка по максимальному количеству вхождений в IN
    #39319301
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то так:
Код: sql
1.
2.
3.
4.
5.
SELECT recept_id, GROUP_CONCAT(product_id) product_list
FROM product_to_recept as ptr
GROUP BY ptr.recept_id
HAVING SUM(ptr.product_id IN(12,3,4))
ORDER BY SUM(ptr.product_id IN(12,3,4)) DESC

По производительности, правда, не фонтан. Но если данных немного, то сойдет.
...
Рейтинг: 0 / 0
Сортировка по максимальному количеству вхождений в IN
    #39319306
korinf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Спасибо, немного поменял, но суть запроса понял. Большое спасибо.
...
Рейтинг: 0 / 0
Сортировка по максимальному количеству вхождений в IN
    #39319329
retvizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

а почему не

SELECT recept_id, GROUP_CONCAT(product_id) product_list
FROM product_to_recept as ptr
WHERE ptr.product_id IN (12,3,4)
GROUP BY ptr.recept_id
ORDER BY count(*) DESC

в этом случае группировка будет идти после отбора нужных рецептов
...
Рейтинг: 0 / 0
Сортировка по максимальному количеству вхождений в IN
    #39319331
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
retvizanв этом случае группировка будет идти после отбора нужных рецептовНо тогда содержимое рецептов будет ограничено перечисленными идентификаторами. А в моем запросе полный список продуктов для выбранных рецептов.

Если же нужны только идентификаторы рецептов, то да, Ваш запрос более оптимальный.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сортировка по максимальному количеству вхождений в IN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]