Count-Problem aus mehreren Tabellen MySQL

Nalia

Benutzer
Beiträge
16
Guten Morgen,
ich versuche schon einige Zeit folgendes Problem zu lösen und bekomme immer nur Fehlermeldungen bei der Abfrage.
Es gibt zwei Tabellen mit folgenden Inhalten (gekürzte Inhalte):
Kategorie: id(int), kat(int), done(boolean)
Fragen: id(int), kid(int)

Ich möchte abfragen, wieviele Kategorien existieren, die done=0 und die mindestens 20 Fragen haben.
Mein Versuch (einer von vielen) sieht wie folgt aus:

"select count(kategorie.id) as kats, count(fragen.kid) as total from kategorie
left join fragen on (kategorie.id = fragen.kid)
where kategorie.gespielt = 0 and total >= 20"

Kann mir jemand auf die Sprünge helfen?
LG
Nalia
 
Werbung:
Du kannst dich im WHERE-Teil eigentlich nicht auf total beziehen, das existiert ja noch nicht. HAVING wäre der richtige Ansatz.
Code:
SELECT k.id,count(f.id) AS anzahl_frage
FROM kategorie k
INNER JOIN fragen f ON k.id = f.kid
WHERE k.done = 0
GROUP BY k.id
HAVING count(f.id) >= 20
Das sollte alle Kategorien ausgeben mit done = 0 und mindestens 20 Fragen.

Wenn du dann nur die Anzahl davon willst könnte das gehen, habe ich nicht getestet:
Code:
SELECT count(DISTINCT k.id) AS anzahl_kategorie,count(f.id) AS anzahl_frage
FROM kategorie k
INNER JOIN fragen f ON k.id = f.kid
WHERE k.done = 0
HAVING count(f.id) >= 20
 
Hallo ukulele,
danke für die schnelle Hilfe.
Dein erster Code gibt mir 19 datensätze aus. das ist die gewünschte korrekte Anzahl.

Ich brauche natürlich nur die Anzahl der Datensätze, also würde ich den zweiten Code benutzen, aber dieser gibt mir komischerweise 29 als Anzahl aus. Diese 29 kann ich überhaupt nicht nachvollziehen, weil es ja nur 19 von insgesamt 32 sein sollten.

PS. Die HAVING-Klausel kannte ich bis heute gar nicht 😳
 
Ich habe es nochmal umgekehrt probiert mit dem zweiten Code, also
... HAVING count(f.id) <= 19

Da kam überhaupt keine Ausgabe bei rum.
Very strange...
 
Dann nimm halt
Code:
SELECT count(k.id) AS anzahl_kategorie,count(f.id) AS anzahl_frage
FROM kategorie k
INNER JOIN fragen f ON k.id = f.kid
WHERE k.done = 0
GROUP BY k.id
HAVING count(f.id) >= 20
Vermutlich ist der count() für Anzahl Fragen irrelevant, der zählt alle Fragen der gezählten Kategorien.
 
Werbung:
Zurück
Oben