Написал рабочий запрос, но что-то мне подсказывает, что он не в порядке...
Работает исправно, но многим не понравился двойной джойн сразу и в основном и вложенных запросах + группировка
Может чего не понимаю?
Дано
Есть 3 таблицы
- товары
products
- акции
discounts
упрощенная для понимания стуктура акций - связь акций и товаров «многие ко многим» в таблице
products_discounts
Задача
Выбрать для списка товаров акцию для каждого товара, с наибольшим приоритетом, которая включена и действующая (интервалы дат)
Сделал работающий запросАйдишники товаров и дату вставил для удобства сразу в запросБолее читабельный запрос в картинке SELECT
pd.product_id,
d.name,
d.discount_percent,
d.discount_amount
FROM s_products_discount pd
LEFT JOIN s_discounts d ON pd.discount_id = d.id
LEFT JOIN (SELECT pd.product_id, MAX(d.priority) as max_priority
FROM s_products_discount pd
LEFT JOIN s_discounts d ON pd.discount_id = d.id
WHERE d.visible = 1
AND d.date_from <= '2018-05-05'
AND d.date_to >= '2018-05-05'
GROUP BY pd.product_id) pp ON pd.product_id = pp.product_id
WHERE 1
AND d.priority = pp.max_priority
AND pd.product_id IN ('41987', '41988', '41989', '41990', '41991', '41992', '41993', '41994')
Если своими словами, то во вложенном запросе получаю табличку, в которой все товары и и приоритетная акция, попадающая под условия