Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Ranking w MYSQL (dwie tabele)
djiras1
post 10.01.2011, 22:40:30
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 18.10.2006

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


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:)
Go to the top of the page
+Quote Post
mkozak
post 17.01.2011, 10:28:32
Post #2





Grupa: Zarejestrowani
Postów: 78
Pomógł: 4
Dołączył: 21.03.2005

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


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.


--------------------
==============================================
Bo ja jestem Wróbelek Htmlek
==============================================
Go to the top of the page
+Quote Post
kefirek
post 17.01.2011, 12:55:06
Post #3





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


  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. }
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: 28.06.2025 - 18:34