2016-12-03 88 views
0

我有以下實體:複雜的過濾器sequelize JS

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)值,那麼你能給我看看看起來像什麼,這意味着小和(白色或紅色)?謝謝 –

+0

您可以使用示例數據創建sqlfiddle(http://sqlfiddle.com/)嗎? 我會進一步解釋你 – maheshiv