Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Zliczenie rekordów danego usera, Nie mam pojęcia jak zrobić: Top 5 Najlepszych reputacji..
Weles
post
Post #1





Grupa: Zarejestrowani
Postów: 213
Pomógł: 0
Dołączył: 7.07.2011

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


Witam.
Piszę sobie skrypt w którym przy poście danego użytkownika można kliknąć "Fajne" lub "Nie fajne".
Mam to zapisane w oddzielnej tabeli w której mam kolumny:

id_postu (id ocenianego posta), user (id z tabeli account), ocena (jeśli 1 to dodania, jeśli 2 to ujemna)

Danemu userowi liczę jego oceny w taki sposób:

  1. $reputacja_like = mysql_num_rows(mysql_query("SELECT * FROM $baza_forum.oceny WHERE autor='$dane[id]' AND ocena='1'"));
  2. $reputacja_not_like = mysql_num_rows(mysql_query("SELECT * FROM $baza_forum.oceny WHERE autor='$dane[id]' AND ocena='2'"));
  3. $reputacja_suma = $reputacja_like-$reputacja_not_like;


Lecz nie wiem jak to zrobić aby obliczyć top 5 najlepszych reputacji i wyświetlić Nick usera który tą reputację posiada..

Proszę o pomoc!
Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Bateria
post
Post #2





Grupa: Zarejestrowani
Postów: 129
Pomógł: 13
Dołączył: 23.11.2011

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


Niestety nie wiem jak jest zbudowany Twój system, ale aby ułatwić sobie życie zaczął bym od prostej zmiany systemu oceniania. Stwórz sobie tabelę, do której będzie wpisywany każdy użytkownik po rejestracji, a wyglądać powinna ona tak:
id | nick | reputations
Jeżeli użytkownik kliknie w poście, że to jest fajne, autor dostaje reputacje +1, w przeciwnym wypadku -1.
Należało by jeszcze stworzyć inną tabelę, w której będzie zapisywane czy dany użytkownik oddał już swój głos w danym temacie.
Potem wystarczy tylko:
  1. SELECT * FROM users_reputations ORDER BY reputations LIMIT 5


Jeżeli się mylę, popraw mnie, naprowadź a postaram się pomóc.

Ten post edytował Bateria 25.03.2012, 14:34:15


--------------------
Go to the top of the page
+Quote Post
Majkelo23
post
Post #3





Grupa: Zarejestrowani
Postów: 226
Pomógł: 17
Dołączył: 13.02.2012

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


  1. SELECT user, COUNT(id_postu) AS ile FROM `tabela` WHERE ocena = 1 LIMIT 5 ORDER BY ile DESC


Ten post edytował Majkelo23 25.03.2012, 14:38:02
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Można to zrealizować w MySQL-u, ale bez podzapytań się nie obejdzie:
  1. SELECT `a`.`nick`, ((SELECT COUNT(*) FROM `oceny` `o1` WHERE `o1`.`user` = `a`.`id` AND `o1`.`ocena` = 1) - (SELECT COUNT(*) FROM `oceny` `o2` WHERE `o2`.`user` = `a`.`id` AND `o2`.`ocena` = 2)) AS `reputacja` FROM `accounts` `a` ORDER BY `reputacja` DESC LIMIT 5
Go to the top of the page
+Quote Post
crocodillo
post
Post #5





Grupa: Zarejestrowani
Postów: 215
Pomógł: 44
Dołączył: 31.07.2011
Skąd: wrocław

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


  1. SELECT t2.pole_z_nickiem_uzytkownika , SUM(t1.ocena) AS o2
  2. FROM nazwa_tabeli_posty AS t1, nazwa_tabeli_uzytkownicy AS t2
  3. WHERE t1.id_autora = t2.id_uzytkownika
  4. GROUP BY t1.id_autora
  5. ORDER BY o2 DESC
  6. LIMIT 5


Otrzymasz 5 użytkowników z największą ilością punktów (+1 za kliknięcie fajne, -1 za kliknięcie niefajne)

tylko musisz zmienić punktację +1 / -1

Ten post edytował crocodillo 25.03.2012, 16:15:18
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 Aktualny czas: 20.08.2025 - 21:01