Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyciągnie danych na podstawie dwóch różnych tabel
proton
post
Post #1





Grupa: Zarejestrowani
Postów: 88
Pomógł: 4
Dołączył: 16.08.2006

Ostrzeżenie: (20%)
X----


Witam

Mam mały problem z wyciąganiem danych na podstawie dwóch innych tabel dokładnie chodzi mi o to że musze z tabeli 'uzytkownicy' wyciagnac userow na podstawie ilosci dodanych komentarzy i ocen gdzie komentarze i oceny są w osobnych tabelach. Zarówno w tabeli komentarzy i ocen jest jedno pole które określa kto napisał ten komentarz czy kto dodał ta ocenę. Udaje mi się wyciągać te dane ale tylko na podstawie jednej tabeli (może pokaże przykład):

  1. SELECT user_name, user_id, count(user_id) AS ilosc_komentarzy FROM komentarze INNER JOIN uzytkownicy ON komentarz_user=user_id GROUP BY user_name ORDER BY ilosc_komentarzy DESC LIMIT 0, 5


Teraz jak to przerobić aby wyciągnąć jeszcze ilość ocen i posortować wg. ilosc_komentarzy+ilosc_ocen
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
proton
post
Post #2





Grupa: Zarejestrowani
Postów: 88
Pomógł: 4
Dołączył: 16.08.2006

Ostrzeżenie: (20%)
X----


Cytat(kefirek @ 22.02.2009, 19:26:29 ) *
Można też tak sprawdzałem i działa
  1. SELECT u.user_id, user_name , COUNT(rating_id) AS ocen, COUNT(comment_id) AS komentarzy
  2. FROM users u
  3. LEFT JOIN ratings r ON (u.user_id=r.rating_user)
  4. LEFT JOIN comments c ON (u.user_id=c.comment_name)
  5. GROUP BY u.user_id
  6. ORDER BY komentarzy DESC, ocen DESC LIMIT 5


To zapytanie działa źle bo sprawdzałem to na małych liczbach i widziałem błąd. Przy pierwszej osobie pobiera znacznie większą liczbę a do tego jeśli ktoś i skomentował i ocenił coś to w obu wartościach (komentarzy i ocen) pokazywało tą samą liczbę.

Sposób który działa też jest nie najwydajnieszy bo widziałem, jednak będe planował aby ranking z tymi wartościami aktualizował się co 24h (co moim zdaniem nie będzie tak obciążało bazy danych - chyba że się mylę).

Do tego mam takie małe pytanie jeśli dodam jeszcze warunek WHERE 'cos=innego' to czy baza najpierw sprawdza rekordy pod względem tego warunku i dopiero potem oblicza te ilości (komentarze i oceny) czy oblicza wartości dla wszystkich i dopiero potem odrzuca te rekordy które nie spełniają warunku. Bo po czasie wykonania widziałem że wykonuje sie szybciej.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 11.10.2025 - 07:18