Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zliczenie rekordów danego usera
Forum PHP.pl > Forum > Przedszkole
Weles
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.
Bateria
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.
Majkelo23
  1. SELECT user, COUNT(id_postu) AS ile FROM `tabela` WHERE ocena = 1 LIMIT 5 ORDER BY ile DESC
mortus
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
crocodillo
  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
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.