Ich brauche Produkte durch die Varianten Inhalte zu filtern, aber ich bin ganz fest, ist die Struktur die folgenden:MySql Filterabfrage zur Produktvariantentabelle
Ich habe diese drei Tabellen:
PRODUKT
______ _________
| id | title |
|------|---------|
| 1 | Shirt |
| 2 | Hood |
PRODUCT_VARIANT
______ ___________
| id | product |
|------|-----------|
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
PRODUCT_VARIANT_CONTENT
______ ___________ __________ __________
| id | variant | option | content |
|------|-----------|----------|----------|
| 1 | 1 | 1 | small |
| 2 | 1 | 2 | blue |
| 3 | 2 | 1 | small |
| 4 | 2 | 3 | red |
| 5 | 3 | 1 | small |
Ok ...
Also, wenn ich brauche alle Produkte zu erhalten, die rot ist, ich die folgende Abfrage ausführen:
SELECT
P.id,
P.`title`,
GROUP_CONCAT(PVC.content) AS content
FROM
product P
LEFT JOIN product_variant PV ON PV.product = P.id
LEFT JOIN product_variant_content PVC ON PVC.variant = PV.id
WHERE PVC.content = 'red'
GROUP BY
P.id, PV.id
Es wird zurück:
______ ___________ _________
| id | title | content |
|------|---------|-----------|
| 1 | Shirt | red |
Das ist OK, das Ergebnis, das ich erwartet habe, aber ich muss alle Produkte, die gleichzeitig klein und rot sind, bekommen, ich weiß nicht, wie ich das erreichen kann, kann mir jemand dabei helfen?
BEARBEITET! Ich habe die Lösung, wenn jemand diese Seite gelangen, ist das Problem gelöst wurde mit dieser Abfrage:
SELECT
P.id,
P.`name`,
PVC1.content,
PVC2.content
FROM
product P
JOIN product_variant PV ON PV.product = P.id
JOIN product_variant_content PVC1 ON PVC1.variant = PV.id AND PVC1.content = 'red'
JOIN product_variant_content PVC2 ON PVC2.variant = PV.id AND PVC2.content = 'small'
GROUP BY
P.id, PV.id
Oh die Freuden des Schreibens von SQL, um mit einem EAV-Modell zu arbeiten ... was in einem relationalen Modell trivial wäre, wird um eine Größenordnung schwieriger gemacht. – spencer7593
Sie können für jeden Inhaltswert einen separaten Join-Pfad verwenden. Zwei Verbindungen zu PRODUCT_VARIANT_COLUMN, eine für "rot", die andere für "klein". Dieselbe Frage wurde schon mehrfach bei StackOverflow gestellt. – spencer7593
Mögliches Duplikat: http://stackoverflow.com/questions/12269135/mysql-eav-match-row-as-field-or-entitys-property-value Um weitere Fragen zu SQL bezüglich des EAV-Modells zu erhalten, fügen Sie das Tag ein Entity-Attribut-Wert in Ihrer Suche. – spencer7593