Zliczające zapytanie do bazy

0

Witajcie
Buduję sobie skrypt z polubieniami, mam dwie tabele w bazie danych mysql i następujący problem.
Pierwsza to wiadomości,

id wiadomość data
15 trelemorele 10.04.2018

a druga przechowuje dane na temat tego kto co ocenił

id id_wiadomosci kto ocena
2 15 loczek111 ciekawe
(u siebie zamiast 'ciekawe' w kolumnie ocena przechowuje 1 lub 0 co oznacza like lub dislike). Problem dotyczy wyświetlania tych informacji, tzn wyświetlam wiadomości jedna pod drugą i kombinuje jak skonstruować zapytanie aby wyświetlało zawartość pierwszej tabeli oraz jednocześnie zliczało ile dana wiadomość ma like lub dislike i wyświetlało te informacje w jednej pętli. Da się to zrobić w jednym zapytaniu?
1

Spróbuj czegoś takiego :)

select wiadomosc,
    sum(ocena = 1) likeCount,
    sum(ocena = 0) dislikeCount
from oceny, wiadomosci where id_wiadomosci = wiadomosc.id
group by id_wiadomosci
0

Działa, wyświetla, zlicza, prawie idealnie ;)
Sęk w tym że Twój warunek po WHERE ogranicza do wyświetlania tych wiadomości które zostały już ocenione, jak go zmodyfikować aby pokazywał też te które nie mają jeszcze żadnej oceny?

1

Zamienić na LEFT JOIN

0

Jeszcze jedna rzecz,

SELECT wiadomosc, SUM(ocena = 1) likeCount, SUM(ocena = 0) dislikeCount
FROM wiadomosci LEFT JOIN oceny ON wiadomosci.id =  oceny.id_wiadomosci
GROUP BY id_wiadomosci

I to już działa, lecz gdy chcę jeszcze zliczać liczbę komentarzy do danej wiadomosci i mam osobną, podobną tabelę do komentarzy co do oceny to gdy używam (przed GROUP BY) drugiej klauzuli

LEFT JOIN komentarze ON wiadomosci.id = komentarze.id_wiad 

to już wtedy sumy likeCount i dislikeCount wypluwają nie prawdziwe wartości, co jest tego powodem?

0

Iloczyn kartezjański jest tego powodem :)

0

Wybacz że tak wprost zapytam, ale w takim razie jak to powinno wyglądać żeby działało jak trzeba?
To nie jest tak że chcę iść całkiem na łatwiznę, poczytałem o iloczynie, wiem co to jest i jak działa, rozumiem dlaczego moje zapytanie nie działa ale mimo wszystko nie wiem jak zrobić żeby wszystko razem grało :)

1

Zamiast tabeli z komentarzami dołącz zagregowane zapytanie dotyczące komentarzy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1