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