mysql - komplitzierte abfrage mit count
Tobi
- datenbank
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
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
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^^