2016-12-03 2 views
0

Ich habe folgende Einrichtungen:komplexe Filter 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] 

Ich möchte folgende Filter in sequelize tun:

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

, die alle Produkte zurück, die entsprechenden Werte aufweisen.

Beispiel:

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. 

Dank

+1

Ich verstehe das Ergebnis nicht wirklich, können Sie es weiter erklären oder ein Beispiel zeigen? –

Antwort

0

Für diese Art von komplexen Abfrage, können Sie versuchen, roh Abfrage mit

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 

Könnten Sie diese Abfrage überprüfen?

+0

Ich glaube nicht, dass ich es verstehe. Kannst du mir bitte geben, wie es aussieht, wenn ich nach 3 und (1 oder 2) Werten filtern möchte, also Small und (White oder Red)? Danke –

+0

Könnten Sie sqlfiddle (http://sqlfiddle.com/) mit Beispieldaten erstellen? Ich werde dich weiter erklären – maheshiv