Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z zapytanie zliczajacym ilosc komentarzy i glosow usera
Forum PHP.pl > Forum > Bazy danych > MySQL
quality
Witam.
Problem polega na tym, ze jak w jednym zapytaniu licze rekordy z dwoch tabel to mi je mnozy np.:
  1. SELECT `this`.`id`, count(b.id) AS `howComments`, count(c.id) AS `howVotes`
  2. FROM `users` AS `this`
  3. LEFT JOIN `comments` AS `b` ON b.id_user = this.id
  4. LEFT JOIN `votes` AS `c` ON c.id_user = this.id
  5. WHERE this.id=88
  6. GROUP BY `this`.`id`


W zapytaniu mam liczone ilosc komentarzy i glosow dla konkretnego uzytkownika.
Wynik mam taki: howComments = 12, howVotes = 12. Jednak rzeczywiscie powinno byc howComments = 4, howVotes = 3.
Dlaczego to mnozy ? Przeciez tabele sa oddzielone, jest group by na id usera.

Macie jakis pomysl ?
thek
Ale nie pomyślałeś, że JOINując w ten sposób tworzysz comments * votes rekordów dla każdego usera zapewne? winksmiley.jpg stąd masz 3 * 4 = 12 rekordów na każdego usera i dlatego count tyle ich sobie wyliczył. Zapewne bowiem nie zauważyłeś, ale te komentarze i głosy się kilkukrotnie powtarzają.
W przypadku takiego zapytania, gdzie dane się kiepsko łączą można albo utworzyć podzapytanie, albo rozbić je na większą ilość zapytań, co będzie wydajniejsze zazwyczaj zresztą, ponieważ uniknie się niepotrzebnego kolejnego JOINowania na już i tak zazwyczaj dużej (wcześniejszy JOIN lub nawet kilka) tabeli, zanim do WHERE czy GROUP BY dojdziemy.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.