Я пытаюсь выбрать DISTINCT продуктов внутри категорий при помощи идентификаторами (1, 5, 12), упорядоченных по cat_order + prod_order из базы данных MySQLMySQL: SELECT, JOIN, GROUP BY запроса оптимизируя
Проблема:
если продукт находится в более чем 1-й категории Мне нужно, чтобы показать первый результат,
т.е. номер изделия 1 присваивается категории 1 и 5, мне нужно показать номер продукта 1 из 1 категории по с его prod_order и пропустить объявление в категории 5,
- essentually Мне нужно отобразить все товары из категории 1, а затем перейти к категории 5 и отобразить все продукты там, где идентификатор продукта не был показан ранее, и перейти к другой категории в списке (12)
если я бегу что-то вроде:
SELECT
prod_to_cat.prod_id AS prod_to_cat_prod_id,
prod_to_cat.prod_order AS prod_to_cat_prod_order,
prod_to_cat.cat_id AS prod_to_cat_cat_id,
prod_to_cat.cat_order AS prod_to_cat_cat_order,
products.id,
products.name
FROM
prod_to_cat, products
WHERE
prod_to_cat.prod_id = products.id
AND prod_to_cat.cat_id IN (1, 5, 12)
GROUP BY
prod_to_cat.prod_id
ORDER BY
prod_to_cat_cat_order ASC,
prod_to_cat_prod_order DESC
Я получаю противоречивые результаты (продукт 1 не будет выбран из первой категории в списке), поэтому я решил выбрать без «GROUP BY prod_id "и оберните это другим выбором, чем группы prod_id.
так:
SELECT
prod_to_cat_prod_id,
prod_to_cat_prod_order,
prod_to_cat_cat_id,
name
FROM
(
SELECT
prod_to_cat.prod_id AS prod_to_cat_prod_id,
prod_to_cat.prod_order AS prod_to_cat_prod_order,
prod_to_cat.cat_id AS prod_to_cat_cat_id,
prod_to_cat.cat_order AS prod_to_cat_cat_order,
products.id,
products.name
FROM
prod_to_cat, products
WHERE
prod_to_cat.prod_id = products.id
AND prod_to_cat.cat_id IN (1, 5, 12)
ORDER BY
prod_to_cat_cat_order ASC,
prod_to_cat_prod_order DESC
) AS prod
GROUP BY
prod_to_cat_prod_id
ORDER BY
prod_to_cat_cat_order ASC,
prod_to_cat_prod_order DESC
LIMIT 0, 10;
То, что я пытаюсь сделать:
Я пытаюсь найти более efficiant способ сделать это.
Структура таблицы:
prod_to_cat:
prod_id | cat_id | cat_order | prod_order |
1 1 1 2
2 1 1 0
3 1 1 0
1 5 2 4
4 5 2 0
products:
id | name | descr | price |
1 name_1
2 name_2
3 name_3
4 name_4
каждый продукт может быть в любом количестве категорий, например, идентификатор продукта 1 в категории ID 1 и 5 в приведенном выше примере.
Большое спасибо за любые ответы. Паша
. , Вы понимаете, что ваши запросы группируются по одному полю (prod_id) и включают в себя другие столбцы. Это использует функцию MySQL, называемую скрытыми столбцами. Остальные столбцы берутся из произвольных записей внутри группы. В частности, prod_order имеет неуказанные значения, учитывая ваши данные. Скрытые столбцы предназначены для случая, когда все значения одинаковы. –