Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapytanie o uzytkownika, ktory ma...
Forum PHP.pl > Forum > Bazy danych > MySQL
mop506
tutaj sa zapisywane glosy na kazdego z uzytkownikow:
  1. CREATE TABLE `Votes` (
  2. `Member` bigint(8) NOT NULL DEFAULT '0',
  3. `Mark` int(11) NOT NULL DEFAULT '0',
  4. `IP` varchar(18) NOT NULL DEFAULT '',
  5. `Date` date NOT NULL DEFAULT '0000-00-00',
  6. UNIQUE KEY `Member` (`Member`,`IP`,`Date`),
  7. KEY `Member_2` (`Member`)

tutaj przechowywane ich dane (fragment):
  1. DROP TABLE IF EXISTS `Profiles`;
  2. CREATE TABLE `Profiles` (
  3. `ID` bigint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
  4. `NickName` varchar(48) NOT NULL DEFAULT '',
  5. ......
  6. `Pic_0_addon` varchar(32) NOT NULL DEFAULT '',
  7. `Status` enum('Unconfirmed','Approval','Active','Rejected','Suspended','NonTested') NOT NULL DEFAULT 'Unconfirmed',
  8. PRIMARY KEY (`ID`),
  9. UNIQUE KEY `NickName` (`NickName`),
  10. KEY `Status` (`Status`)

kod odpowiedzialny za sprawdzanie ktory z uzytkownikow ma najwieksza srednia glosow jest taki:
  1. SELECT Headline, NickName, Member, COUNT(*) AS `count`, SUM(Mark)/COUNT(*) AS mark, ID, Pic_0_addon
  2. FROM `Votes` INNER JOIN Profiles ON (ID = Member) WHERE STATUS = 'Active' AND TO_DAYS(NOW()) - TO_DAYS(`Date`) <= 7 GROUP BY Member HAVING `count` > 0 ORDER BY Mark DESC LIMIT 1

niestety nie dziala on prawidlowo. podam przyklad; na pana A oddano 3 glosy; 5,5,4 (wiadomo srednia 4.6...) a na pania B oddano jeden tylko glos; 5. zapytanie SQL zwraca pania B. chcialbym by zwracalo osobe, na ktora minimum oddano 5 glosow. myslalem, ze odpowiedzialny jest za to fragment
  1. ... HAVING `count` > 0 ....

niestety to nie to i nic nie pomoglo. ma ktos pomysl jak powinno prawidlowo brzmiec takie zapytanie?

*ps. chodzi oczywiscie o najlepszego uzytkownika z ostatniego tygodnia*
nospor
po pierwsze popraw bbcode na SQL
podrugie wynik masz ok. Zapytanie generujesz aby ci zwracal gostka z największą srednią, czyli pan B.

Tu masz wersje minimum 5 glosów i najwieksz srednia:
  1. SELECT Headline, NickName, Member, COUNT(*) AS `count`, SUM(Mark)/COUNT(*) AS mark, ID, Pic_0_addon
  2. FROM `Votes` INNER JOIN Profiles ON (ID = Member) WHERE STATUS = 'Active' AND TO_DAYS(NOW()) - TO_DAYS(`Date`) <= 7 GROUP BY Member HAVING `count`>=5 ORDER BY Mark DESC LIMIT 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-2024 Invision Power Services, Inc.