Mailinglisten-Archive |
Am 08.02.2007 um 14:26 schrieb Sebastian Mendel:
> gerd schrieb:
>> Hallo,
>> nach langem Mitlesen hätte ich nun auch mal ein Problem!
>> Vielleicht könnt Ihr mir einen Hinweis geben!
>>
>> Um es gleich zu sagen: es geht nur um "MySQL" und das in den
>> Versionen "4.1.12-standard" im Testsystem und "4.0.23-Max-log" im
>> Web.
>>
>> Artikel sind über eine Zwischentabelle mit Kategorien verbunden:
>>
>> Artikel <- Zwischentabelle -> Kategorien
>>
>> Jetzt will ich nur die Artikel haben, die mit einem bestimmten Satz
>> von Kategorien verbunden sind: z. B. : 'cat1', 'cat2', 'cat3'
Ich muß noch nachschieben, das ein gesuchter Artikel auch mit mehr
Kategorien als 'cat1', 'cat2', 'cat3' verbunden sein darf!
Deshalb sehe ich auch die Lösungen mit mehrfacher Tabellenverwendung
kritisch; die Zahl der Kategorien dürfte typischerweise zwischen 3
und 6 liegen.
Es werden also alle Artikel gesucht, die mindestens mit den
Kategorien : 'cat1', 'cat2', 'cat3' verbunden sind. Alle Kategorien
dieser gefundenen Artikel sollen ausgegeben werden .
Da ich die Datensätze in Templates mit inneren Schleifen ausgebe,
wäre ein solches Ergebnis ideal:
artikel.id | kat.name
-------------------------------
3 | cat1
3 | cat2
3 | cat3
3 | cat6
3 | cat9
5 | cat1
5 | cat2
5 | cat3
5 | cat5
Ausgabe z.B.:
artikel: 3
cat1 | cat2 | cat3 | cat6 | cat9
artikel: 5
cat1 | cat2 | cat3 | cat5
> ungetestet:
>
> SELECT
> `artikel`.*,
> COUNT(`atokat`.`kat_id`) AS `anzahl`
> FROM
> `artikel`
> LEFT JOIN
> `atokat`
> ON
> `atokat`.`artikel_id` = `artikel`.`id`
LEFT JOIN
`kat`
ON
`atokat`.`kat_id` = `kat`.`id`
AND
`kat`.`name` IN ('cat1', 'cat2', 'cat3')
> GROUP BY
> `artikel`.`id`
> HAVING
`anzahl` >= 3
Sebastian, ich habe den JOIN zur dritten Tabelle nachgerüstet und die
Anzahl nur nach unten begrenzt, bekomme aber auch Artikel mit
vollständig anderen Kategorien ausgegeben!? Die Begrenzung auf
"`kat`.`name` IN ('cat1', 'cat2', 'cat3')" scheint nicht zugreifen.
>
> davon ausgehend das (atokat.artikel_id, atokat.kat_id) UNIQUE ist
Ja, sehe ich jetzt auch. Muss mindestens bei den COUNT-Lösungen
erfüllt sein.
Vielleicht will ich auch zuviel für eine Abfrage (ohne Subselect). :-(
Danke für alle Ansätze, weitere sind willkommen!
Gruß Gerd
_______________________________________________
Allgemeine Infos zur Liste: http://www.4t2.com/mysql/
Verwaltung: https://lists.4t2.com/cgi-bin/mailman/listinfo/mysql-de
php::bar PHP Wiki - Listenarchive