Помогите с запросом.

demongloom

Новичок
Помогите с запросом.

Есть продукты, где каждый продукт имеет свой ID.
Есть список в котором есть связка ID продукта и его цены.
Кроме этого в записи есть данные о ID списка и ID его типа.
Тип списка используется для созднания иерархии.

В итоге есть таблицы:
1. list_types
ID
Name
Priority (приоритет для иерархии, чем меньше число тем он приоритетней)

2. products
ID
Name

3. list_products
list_id
list_type_id
product_id
price

Списки связаны с друг другом для дополнения.

Дано 3 типа списка.
1. Глобальный: Нужен для связки всех продуктов со всеми списками. Для связи цены по умолчанию значение 0. Приоритет 3.
2. Групповой: Содержит цены продуктов для группы сайтов. Приоритет 2.
3. Сайт: Содержит цены продуктов для сайта. Приоритет 1.

Допустим у нас есть 5 продуктов:
1. Картошка
2. Капуста
3. Свекла
4. Морковь
5. Петрушка

Эти продукты связаны с глобальным списком 1 и цена установлена в 0 (продукт выключен).
У меня есть группа 20, в которой установлена цена на продукты 2,4,5 в 100 руб.
В группу 20 входит сайт 301, 302, 303
301 не описан в списке, следовательно он принимает все продукты и цены из его группы (капуста, морковь, петрушка).
302 имеет цену на продукт 1 в 200 руб. Значит он принимает все продукты и цены из его группы + имеет "включенную" картошку по цене 200.
303 имеет цену на продукт 2 в 150 руб. Значит он принимает все продукты и цены из его группы, но капуста стоит 150 руб.

В базе выглядит так

list_types:
1, Global, 3
2, Profile, 2
3, Site, 1

products:
1, Kar
2, Kap
3, Sve
4, Mor
5, Pet

list_products:
1, 1, 1, 0
1, 1, 2, 0
1, 1, 3, 0
1, 1, 4, 0
1, 1, 5, 0
20, 2, 2, 100
20, 2, 4, 100
20, 2, 5, 100
302, 3, 1, 200
303, 2, 2, 150

Требуется

Если выбираю глобальный список:
1, 0
2, 0
3, 0
4, 0
5, 0

Если выбираю для 20 или 301:
1, 0
2, 100
3, 0
4, 100
5, 100

Если выбираю для 302:
1, 200
2, 100
3, 0
4, 100
5, 100

Если выбираю для 303:
1, 0
2, 150
3, 0
4, 100
5, 100

Пока получилось:
Данные кто в какой группе будут подставляться извне.
Скажем для получения списка цен для группы третий OR не нужен.

SELECT
lp.product_id,
lp.price
FROM
list_products lp
INNER JOIN
list_types lt ON lt.id = lp.list_type_id
WHERE
(
( lp.list_id = '1' AND entity_type_id = '1' )
OR ( lp.list_id = '20' AND entity_type_id = '2' )
OR ( lp.list_id = '303' AND entity_type_id = '3' )
)
ORDER BY
lt.priority ASC

Вопрос как это сгруппировать?

При использовании group by lp.product_id упорно беруться данные из глобального списка т.е.
1, 0
2, 0
3, 0
4, 0
5, 0
 
Сверху