ich eine Indextabelle der Einheit haben Attributwerte, die wie folgt aussieht: +-----------+--------------+----------+-------+ | entity_id | attribute_id | store_id | value | +-----------+--------------+----------+-------+ | 38 | 190 | 1 | 22 | | 38 | 190 | 1 | 23 | | 39 | 190 | 1 | 22 | | 39 | 190 | 1 | 23 | | 39 | 190 | 1 | 42 | | 40 | 190 | 1 | 22 | | 41 | 190 | 1 | 54 | | 42 | 190 | 1 | 54 | | 43 | 190 | 1 | 22 | | 44 | 190 | 1 | 22 | | 45 | 190 | 1 | 54 | +-----------+--------------+----------+-------+
Wie Werte zählen bedingt in SQL
Wie Sie eine einzelne Einheit mehrere Werte für ein einzelnes Attribut haben kann sehen (entity_id
38 hat value
s 22,23) und diese Werte sind nicht eindeutig pro Einheit (entity_id
38,39 beide teilen value
22).
Das erste zu lösende Problem besteht darin, die Anzahl der verschiedenen Entitäten pro Wert zu ermitteln. dies leicht erreicht mit:
SELECT value, COUNT(entity_id) AS count
FROM catalog_product_index_eav
WHERE attribute_id=190
GROUP BY value;
die Ergebnisse in: +-------+-------+ | value | count | +-------+-------+ | 22 | 5 | | 23 | 2 | | 42 | 1 | | 54 | 3 | +-------+-------+
Meine Frage ist, wie kann ich Nest eine ODER-Bedingung in dieser Zählung, nämlich: für einige spezifischen Wert Y, für jeden Wert X, zähle die Anzahl der Entitäten, die entweder den Wert X oder Y haben.
Ich möchte dies in einer einzigen Abfrage tun. Zum Beispiel für attribute_id
190 und value
23, sollte die Ausgabe von oben Beispiel sein: +-------+-------+ | value | count | +-------+-------+ | 22 | 5 | # all entities with value 22 happen to have 23 as well | 23 | 2 | that is, one is a subset of the other | 42 | 2 | # intersection is nonempty | 54 | 5 | # sets are disjoint +-------+-------+
Sie wollen, außer dass die gleiche Abfrage auszuführen nur bestimmte Werte wählen? – Luke
Nein. Betrachten Sie die erste Abfrage, die zu der ersten Tabelle [Wert, Anzahl] führt. Ich möchte eine analoge Abfrage finden, die in der zweiten Tabelle [Wert, Anzahl] oben resultiert. Es werden immer noch alle Werte ausgewählt, aber es zählt die Entity_id mit dem Wert x OR y bedingt, anstatt die Entity_id mit dem Wert x zu zählen. – SamTay
Sie wollen also eine separate Ergebnismenge für jeden der Werte in der ersten Ergebnistabelle? – Luke