Guten Abend,
mein Problem ist folgendes: Ich habe drei Tabellen, die ich mittels JOIN verbinde. Die erste Tabelle enthält
Datensätze, die zweite
Kommentare dazu und die dritte
Noten/Bewertungen zu den Datensätzen.
Mein erster Befehl lautete:
Code:
SELECT ideas.IID, AVG(SCORE) AS PUNKTE, ideas.COMPANY, COUNT(comments.CID)
FROM ideas LEFT JOIN comments on comments.IID = ideas.IID LEFT JOIN ratings ON ideas.IID = ratings.IID
GROUP BY comments.CID
und ich erhielt
Code:
#-----#------------#---------#------------#
| IID | AVG(SCORE) | COMPANY | COUNT(CID) |
#-----#------------#---------#------------#
| 1 | 1.0000 | a | 2 |
| 2 | 4.5000 | b | 2 |
| 3 | 0.0000 | c | 2 |
| ... | ... | ... | ... |
| 9 | 9.0000 | e | 4 |
| 11 | NULL | d | 0 |
#-----#------------#---------#------------#
Das schien richtig, ist es aber nicht. In Wirklichkeit hat "b"
nämlich nur einen Kommentar, nicht zwei - mein Beispiel ist gekürzt, es trat noch in anderen Zeilen auf.
Dann habe ich was anderes versucht, einen Schritt zurück:
Code:
SELECT ideas.IID, COMPANY, COUNT(CID)
FROM comments LEFT JOIN ratings ON comments.IID = ratings.IID LEFT JOIN ideas ON ideas.IID = comments.IID
GROUP BY comments.CID
und erhielt
Code:
#-----#---------#------------#
| IID | COMPANY | COUNT(CID) |
#-----#---------#------------#
| 1 | a | 1 |
| 1 | a | 1 |
| 2 | b | 2 |
| ... | ... | ... |
| 9 | e | 1 |
| 9 | e | 1 |
| 9 | e | 1 |
| 9 | e | 1 |
#-----#---------#------------#
Schon besser, denn hier kann man sehen, dass "b" tatsächlich nur einen Kommentar zugeordnet bekommen hat. Nur: Die Zahl in der Spalte COUNT(CID) entspricht nicht der Wahrheit, vielmehr sollte jede IID nur einmal vorkommen und die Anzahl der gleichen IIDs gleich der Spalte COUNT(CID) sein, dann würde es stimmen.
Wie bekomme ich das jetzt nur hin (und die AVG(SCORE)-Spalte danach wieder)?
Bin ich total auf dem Holzweg? Reichen euch diese Informationen?
Vielen Dank für eure Hilfe!