LEFT JOIN - Frage

Sasser

Erfahrenes Mitglied
Guten Abend!

Ich führe eine LEFT JOIN Abfrage in MySQL aus. Nun werden allerdings Datensätze, die in "games" vorhanden sind, aber nicht jedoch in "reviews" nicht angezeigt. Kann man diese Datensätze trotzdem anzeigen? Hintergrund dieser Abfrage ist ein Voting-System, welches alle Spiele nach den Bewertungen und den vergebenen Punkten sortiert.

Code:
SELECT games.id, games.name, games.description
FROM `games`
LEFT JOIN `reviews`
ON games.id = reviews.game
WHERE games.active = '1' && reviews.active = '1'
GROUP BY games.id
ORDER BY COUNT(reviews.id) DESC, AVG(reviews.points) DESC
LIMIT 15
 
Diames die kein Review haben fallen im WHERE durch die Prüfung reviews.active = '1'

Du willst alle Games und dazu alle Reviews die aktiv sind. Dazu am besten für die Reviews eine Unterabfrage erstellen.
SQL:
SELECT 
	games.id, 
	games.name, 
	games.description
FROM 
	games
	LEFT JOIN (
				SELECT,
					id,
					points
					game
				FROM
					reviews
				WHERE
					active = '1'
			) AS rev
		ON games.id = rev.game
WHERE 
	games.active = '1'
GROUP BY 
	games.id
ORDER BY 
	COUNT(rev.id) DESC, 
	AVG(rev.points) DESC
LIMIT 15

Habs grad nicht getestet. Die Frage ist noch, wie sich der AVG() verhält. Wenn keine Reviews vorhanden sind, ist rev.points NULL. ggf dort noch auf Null prüfen falls Fehler auftretten. Alles was NULL ist als 0 auswerten:
SQL:
AVG(IFNULL(rev.points,0))
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück