phpbar.de logo

Mailinglisten-Archive

3-Tabellenproblem

3-Tabellenproblem

Sebastian Mendel lists at sebastianmendel.de
Fre Feb 9 11:09:17 CET 2007


gerd schrieb:
> 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 .

willst du nun die Daten des artikels oder auch die Daten der verbudnen 
Kategorien? Du hast bsiher immer nur von den Artikeln gesprochen - das ist 
ein 'kleiner' Unterschied ob du nur die Artikel haben willst die in mind. 
bestimten Kats. sind oder ob du auch alle Kategorien zu diesen bestimmten 
Artikeln haben möchtest ...


> 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). :-(

du musst natürlich auch das COUNT anpassen





-- 
Sebastian Mendel

www.sebastianmendel.de
_______________________________________________
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