Attribut-Kombinationen zählen

Attribut-Kombinationen zählen

am 30.03.2007 00:36:07 von Florian Laws

Hallo,

ich habe eine Tabelle der Form

entry_id item_id prop_id
1 1 A
2 1 B
3 1 C
4 2 A
5 2 C
6 2 D

Ich möchte nun die Anzahl des Items wissen, bei denen die Properties
in den Kombinationen "A", "A,B" sowie "A,B,C" vorkommen.
Dabei sollen auch solche Items gezählt werden, bei denen neben der
gesuchten Kombination auch weitere Properties vorkommen.
In diesem Beispiel würde ich also dieses Ergebnis wünschen:

"A" 2 (Items 1 und 2)
"A,B" 1 (nur Item 1)
"A,B,C" 1 (nur Item 1)

Wie kann ich ich das möglichst effizient aus der Datenbank bekommen,
ggf. auch mit Hilfe der Anwendung?

Meine Überlegungen waren einmal:

SELECT COUNT(DISTINCT item_id) FROM table
WHERE prop_id = A
[ AND ... AND prop_id C ]

wobei die Anfrage n mal ausgeführt wird, und jedes Mal eine AND-Bedingung
hinzukommt, so dass die erste Anfrage nur nach "A" sucht, die letzte nach
"A AND B AND C".


Die andere:

SELECT item_id, GROUP_CONCAT(prop_id) FROM table GROUP BY item_id

und anschließend in der Anwendung über das Ergebnis iterieren,
das Ergebnis des GROUP_CONCATs auseinandernehmen und auf das Vorhandensein
der gewünschten Kombinationen prüfen.


Habt Ihr bessere Ideen?

Die Kombinationen haben die Eigenschaft, dass von Schritt zu Schritt immer
genau eine weitere Property dazukommt. Es können aber auch mal mehr als
drei Properties werden, und es sind natürlich auch nicht immer A, B und C.

Danke und Grüße,

Florian