Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z zapytanie zliczajacym ilosc komentarzy i glosow usera
quality
post 28.01.2011, 09:50:24
Post #1





Grupa: Zarejestrowani
Postów: 172
Pomógł: 9
Dołączył: 13.02.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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 ?


--------------------
Go to the top of the page
+Quote Post
thek
post 28.01.2011, 12:07:22
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 20:49