phpbar.de logo

Mailinglisten-Archive

3-Tabellenproblem

3-Tabellenproblem

Robert Pleniger ml at rpdev.at
Fre Feb 9 11:59:17 CET 2007


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