Mailinglisten-Archive |
Hallo Gerd. Sebastian Mendel wrote: > gerd schrieb: >> Am 08.02.2007 um 14:26 schrieb Sebastian Mendel: >> >> 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 > > du willst aber nicht nur die art.id ? > dann könntest du dir die Tabelle artikel in der Abfrage auch sparen ... > > >> 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` > COUNT(`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). :-( Subselects sind bequem aber nicht notwendig. Damals als ich noch jung war ... ;-) > > du musst natürlich auch das COUNT anpassen > > Ist es nicht möglich, dass (atokat.artikel_id, atokat.kat_id) UNIQUE ist, benötigst Du für jede Kategorie eigene JOINs: SELECT `artikel`.* FROM `artikel` INNER JOIN `atokat` ak1 ON ak1.`artikel_id` = `artikel`.`id` INNER JOIN `kat` k1 ON ak1.`kat_id` = k1.`id` AND k1.`name` = 'cat1' INNER JOIN `atokat` ak2 ON ak2.`artikel_id` = `artikel`.`id` INNER JOIN `kat` k2 ON ak2.`kat_id` = k2.`id` AND k2.`name` = 'cat2' INNER JOIN `atokat` ak3 ON ak3.`artikel_id` = `artikel`.`id` INNER JOIN `kat` k3 ON ak3.`kat_id` = k3.`id` AND k3.`name` = 'cat3' GROUP BY `artikel`.`id` Servus Robert _______________________________________________ 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