Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ranking w MYSQL (dwie tabele)
Forum PHP.pl > Forum > Bazy danych > MySQL
djiras1
Witajcie.

Potrzebuje zrobic maly ranking uzytkownikow zliaczajacy ile postow napisali i ile razy zaglosowali na toplisty w ustalonym przedziale czasowym.

Dwie tabele:

phpbb_toplisty
id
toplista (nr toplisty)
user_id
data (w formacie unix)

phpbb_posts
post_id
poster_id
post_time (format unix)

No i teraz chce wyswietlic uzytkownikow w kolejnosci malejacej ktorzy zgromadzili najwiecej punktow w danym czasie. 1pkt za topliste i 1 za napisanie posta. Nie wiem za bardzo jak to zrobic. Napisalem cos łopatologicznego ale nie umiem posortowac, poza tym strasznie niezdarne to zapytanie.

  1. $wyswietl = mysql_query("SELECT COUNT(poster_ip) AS il_postow, poster_id, post_time FROM phpbb_posts GROUP BY poster_id");
  2.  
  3. while($ww = mysql_fetch_array($wyswietl))
  4. {
  5.  
  6. $osoba=$ww[poster_id];
  7.  
  8. $wynik = mysql_query("SELECT COUNT(toplista) AS glosy, user_id, czas FROM phpbb_toplisty WHERE user_id='$osoba' GROUP BY user_id");
  9.  
  10. while($szukane = mysql_fetch_array($wynik))
  11. {
  12.  
  13. $suma=$szukane[glosy]+$ww[il_postow];
  14.  
  15. echo $suma.'<br>';
  16.  
  17.  
  18.  
  19. }
  20. }


prosze o pomoc, jakies wskazowki:)
mkozak
Zapytanie zapytaniem,
Nędza to te nested loopy. Nie możesz puszczać tego w pętlach za każdym wyświetleniem. Musisz liczyć na piechotę i przechowywać w tabelce pod tytułem wyniki (czy user_ilosc_punktow).
Przy każdym poście/topliście dodawaj jeden punkt. W taki sposób będziesz miał wyniki zawsze w postaci danych i nie będziesz musiał count()-ować.

Wynik twojego programiku możesz użyć jako dane wyjściowe. Zapisz to co ci wyjdzie do nowej tabeli (user_ilosc_punktow), a dalej to już dodawaj do niej.

Przy wyświetlaniu zrobisz sobie select z user_ilosc_punktow.
kefirek
  1. $wynik = mysql_query("SELECT (COUNT(poster_id) + (SELECT COUNT(user_id) FROM phpbb_toplisty WHERE user_id=poster_id)) AS suma FROM phpbb_posts GROUP BY poster_id ORDER BY suma DESC");
  2. while($r = mysql_fetch_array($wynik)){
  3. echo $r['suma'].'<br/>';
  4. }
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.