Zliczające zapytanie do bazy

Odpowiedz Nowy wątek
2018-04-10 21:10
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?

edytowany 2x, ostatnio: loczek111, 2018-04-10 22:18

Pozostało 580 znaków

2018-04-10 22:37
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

Pozostało 580 znaków

2018-04-10 23:00
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?

Pozostało 580 znaków

2018-04-10 23:14
1

Zamienić na LEFT JOIN

Pozostało 580 znaków

2018-04-11 17:13
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?

edytowany 1x, ostatnio: loczek111, 2018-04-11 17:14

Pozostało 580 znaków

2018-04-12 23:06
0

Iloczyn kartezjański jest tego powodem :)

Pozostało 580 znaków

2018-04-16 19:23
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 :)

Pozostało 580 znaków

2018-04-16 20:51
1

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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