Tobi: mysql - komplitzierte abfrage mit count

MySQL-Client-Version: 4.1.22

hallo, hab da ein problem wo ich nicht weiterkomme. es geht um ein postkarten lexikon.

hier ist die abfrage für eine liste wo alle bundesländer mit zugehöreingen karten als anzahl ausgegeben werden sollen.
problem ist das die postkarten (tabelle card) 1 bis n-verknüpfungen mit der tabelle dak haben können.
diese wiederum haben eine geradlinige verknüpfung mit der stadteil (city)- stadt (stadt)- region (region)- land (c) ...

bsp.: eine karte aus Dresden hat die semperoper und die hofkirche als motiv. diese motive sind jeweils eine verknüpfung mit der tabelle dak, diese haben wiederum alle eine verknüpfung mit dem dem stadtteil (city)

heißt karte 123 hat 2 verschiedene motive (dak) und alle sind mit der selben stadt verknüpft (stadt)

wenn ich jetzt so die karten zähle dann bekomm ich aber falsche werte.
bei 2 motiven die mit der karte verknüpft sind hab ich dann auch 2 ergebnisse obwohl ich nur eines haben möchte.
bei 5 karten mit 2-3 motiven, gibt es dann in der land/region und stadtliste immer je karte 1-2 ergebnisse zuviel angezeigt.
was tun?

SELECT
   count(card.id) AS card_anz,
   region.id AS regionid,
   region.region_de,
   region.region_org,
   c.id,
   c.$lang_sql_c
                FROM ka_c c
   LEFT JOIN ka_region region ON c.id = region.c_id
   LEFT JOIN ka_stadt stadt ON region.id = stadt.region_id
   LEFT JOIN ka_city city ON stadt.id = city.stadt_id
   LEFT JOIN ka_dkat_v_stadt dstadt ON city.id = dstadt.cityid
   LEFT JOIN ka_dkat_v_ak dak ON dstadt.dkatid = dak.dkatid
   Left JOIN ka_card card ON dak.akid = card.id
               WHERE c.id = '$suche'
                GROUP BY region.id
                ORDER BY region.region_de ASC

  1. yo,

    bei 5 karten mit 2-3 motiven, gibt es dann in der land/region und stadtliste immer je karte 1-2 ergebnisse zuviel angezeigt.
    was tun?

    erst einmal ist deine query syntaktisch falsch. nur mysql gibt bei dieser abfrage keine fehlermeldung aus, alle anderen dbms würden das tun, weil du spalten ausgibst, über die du nicht gruppierst und die keine aggregat-funktionen sind.

    zum anderen kannst du den count mit einer unterabfrage einbauen, ann kannst du dir auch die grupperieung sparen.

    Ilja

    1. was müsste ich denn anders gruppieren? alles in group reinpacken was ich auch ausgeben will?

      group by region.region_de, c.c_de ?

      und wie soll ich das mit der unterabfrage machen? ich hab schonmal was davon gehört^^