复合滤波器sequelize js

时间:2016-12-03 22:28:22

标签: node.js 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 :(得分: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

您可以查看此查询吗?