2016-12-03 3 views
0

расслоение плотной I имеют следующие субъекты:сложный фильтр sequelize

Product   [id, name] 
Properties   [id, name, product_id] 
Values    [id, name, property_id] 
Offer    [id, product_id] 
OfferDetail  [offer_id, property_id, value_id] 

Я хочу сделать следующий фильтр в sequelize:

product_id 
[property_1, value_1], [property_2, value_2], ... 

, которая будет возвращать все продукты, имеющие соответствующие значения.

Пример:

Products 
[{1, Potato}, {2, Tomato}] 

Properties 
[{1, Color, 1}, {2, Size, 1}, {3, Size, 2}] 

Values 
[{1, White, 1}, {2, Red, 1}, {3, Small, 2}, {4, Big, 2}, {5, Medium, 2}, {6, Small, 3}, {7, Big, 3}] 

Offer 
[{1, 1}, {2, 1}, {3, 2}] (I have 3 offers, 2 for potato and 1 for tomato) 

OfferDetail 
[{1, 1, 1}, {1, 2, 3}, {2, 1, 2}, {3, 3, 6}] 
meaning: 
Potato: {Color White}, {Size Small} 
Potato: {Color Red} 
Tomato: {Size Small} 

I want to be able to filter: 
Potato Small 
Potato (White or Red) 

or a mix of them. 

Благодаря

+1

Я действительно не понимаю результат, вы можете объяснить его дальше или показать пример? –

ответ

0

Для этого типа сложного запроса, вы можете попробовать использовать необработанный запрос

select p.name, group_concat(distinct pr.name separator ',') as prNames, group_concat(distinct v.name separator ',') as prValues from OfferDetail od join Offer o on o.id=od.offer_id left join Properties pr on pr.id=od.property_id left join Values v on v.id=od.value_id left join Products p on p.id=o.product_id group by od.offer_id 

Не могли бы вы проверить этот запрос?

+0

Я не думаю, что понял. Не могли бы вы дать мне, как это выглядит, если я хочу фильтровать значения 3 и (1 или 2), что означает Small и (белый или красный)? Спасибо –

+0

Не могли бы вы создать sqlfiddle (http://sqlfiddle.com/) с образцами данных? Я объясню вам далее – maheshiv