Hallo liebe MySQL Freunde,
in den letzten drei Tagen haben ich mich durch etwa 120 Web Seiten durchgeackert, dieses und andere Foren durchforstet und etwa 3.000 Variationen einer Abfrage über mehrere Tabellen mit LEFT JOINS, INNER JOINS, LEFT OUTER etc. etc.
Die Funktionsweise eines Joins ist mir mittlerweile klar aber trotz all dem erhalte ich nicht die richtige bzw. gewünschte Ergebnismenge zurück. Mittlerweile habe ich das Gefühl das mit meinem DB Layout vielleicht etwas nicht stimmt und ich dort den Fehler habe und aus diesem Grund es nicht funktioniert. Bevor mir nun der Schädel platzt, kann mich bitte jemand an die Hand nehmen und es mir erklären?
Ich habe vier Tabellen die wie folgt aussehen:
Schema
Und nun das query:
Die Ergebnisse (mit dazugehörigem Explain) wie folgt:
Result
Da sollte aber bei "COUNT_ratings" und "COUNT_favourites" folgendes stehen:
Wenn ich nun das "COUNT(favourites.favourite_id)..." und den "LEFT JOIN favourites..." weglasse bekomme ich die richtigen Ergebnisse. Ich will nicht wissen welches Ergebniss ich bekomme, wenn in einer der Tabellen (z.B. favourites) nichts drin steht - müsste doch "0" rauskommen aber doch nicht 11tausendungrad
Was zum Henker mach ich falsch? Bitte, kann jemand helfen - bin am Verzweifeln.
Liebe Grüsse
Michael
in den letzten drei Tagen haben ich mich durch etwa 120 Web Seiten durchgeackert, dieses und andere Foren durchforstet und etwa 3.000 Variationen einer Abfrage über mehrere Tabellen mit LEFT JOINS, INNER JOINS, LEFT OUTER etc. etc.
Die Funktionsweise eines Joins ist mir mittlerweile klar aber trotz all dem erhalte ich nicht die richtige bzw. gewünschte Ergebnismenge zurück. Mittlerweile habe ich das Gefühl das mit meinem DB Layout vielleicht etwas nicht stimmt und ich dort den Fehler habe und aus diesem Grund es nicht funktioniert. Bevor mir nun der Schädel platzt, kann mich bitte jemand an die Hand nehmen und es mir erklären?
Ich habe vier Tabellen die wie folgt aussehen:
Schema
Und nun das query:
Code:
SELECT
submissions.submission_name,
AVG(ratings.rating) AS AVG_rating,
COUNT(ratings.ratings_id) AS COUNT_ratings,
users.username,
COUNT(favourites.favourite_id) AS COUNT_favourites
FROM submissions
LEFT JOIN ratings ON (submissions.submission_id = ratings.submission_id)
LEFT JOIN users ON (submissions.user_id = users.user_id )
LEFT JOIN favourites ON (submissions.submission_id = favourites.submission_id)
WHERE users.active = 1 AND submissions.active = 1
GROUP BY submissions.submission_id, ratings.submission_id, favourites.submission_id
ORDER BY AVG_rating DESC, submissions.date DESC
LIMIT 0,6
Die Ergebnisse (mit dazugehörigem Explain) wie folgt:
Result
Da sollte aber bei "COUNT_ratings" und "COUNT_favourites" folgendes stehen:
Code:
submisison_name COUNT_ratings COUNT_favourites
Hunter Killer 295 40
DON'T DO IT! 256 29
Corals 362 19
Moh's ball 184 10
little "Who" 234 14
My Treasure ! 125 8
Wenn ich nun das "COUNT(favourites.favourite_id)..." und den "LEFT JOIN favourites..." weglasse bekomme ich die richtigen Ergebnisse. Ich will nicht wissen welches Ergebniss ich bekomme, wenn in einer der Tabellen (z.B. favourites) nichts drin steht - müsste doch "0" rauskommen aber doch nicht 11tausendungrad
Was zum Henker mach ich falsch? Bitte, kann jemand helfen - bin am Verzweifeln.
Liebe Grüsse
Michael