Cześć, mam taki problem. Otóż mam zapytanie, które zwraca: Tytuł piosenki, średnią głosów i ilość głosów. Wszystko z dwóch tabel: songs i grades.
Tabela grades wygląda tak:
ID
songID - id piosenki z tabeli songs
userID - id użytkownika
grade - ocena
Teraz chcę, żeby użytkownik mógł głosować tylko raz na daną piosenkę. I tu się pojawia problem, ponieważ jednocześnie chcę mieć wyświetlaną średnią głosów i ilość głosów oddaną na tą piosenkę.
Moje zapytanie wygląda tak:
SELECT s.ID as ID, s.title as title, s.mp3 as mp3, g.userID as UID, g.grade as grade, AVG(g.grade) AS srednia,
g.songID as GSID, g.userID as GUID, COUNT(g.grade) AS ilosc
FROM songs s
LEFT JOIN grades g on g.songID = s.ID AND g.userID = 2
GROUP BY UID, grade, GSID, GUID, ID, title, mp3
HAVING s.mp3 != ''
ORDER BY s.id desc
Problem jest przez warunek w left join: AND g.userID = 2, ponieważ wtedy pobiera średnią i ilość tylko dla tego użytkownika, a nie dla wszystkich.
Próbowałem rozwiązać to poprzez zagnieżdżony select, a nawet unie, ale żaden sposób nawet nie poszedł.
Jak to zrobić?
Aha ten warunek : AND g.userID = 2 musi być obecny, ponieważ dzięki temu rozróżniam, czy użytkownik oddał już głos na daną piosenkę.
Muszę to zrobić jednym zapytaniem