CREATE TABLE `Votes` ( `Member` bigint(8) NOT NULL DEFAULT '0', `Mark` int(11) NOT NULL DEFAULT '0', `IP` varchar(18) NOT NULL DEFAULT '', `Date` date NOT NULL DEFAULT '0000-00-00', UNIQUE KEY `Member` (`Member`,`IP`,`Date`), KEY `Member_2` (`Member`)
tutaj przechowywane ich dane (fragment):
DROP TABLE IF EXISTS `Profiles`; CREATE TABLE `Profiles` ( `ID` bigint(8) UNSIGNED NOT NULL AUTO_INCREMENT, `NickName` varchar(48) NOT NULL DEFAULT '', ...... `Pic_0_addon` varchar(32) NOT NULL DEFAULT '', `Status` enum('Unconfirmed','Approval','Active','Rejected','Suspended','NonTested') NOT NULL DEFAULT 'Unconfirmed', PRIMARY KEY (`ID`), UNIQUE KEY `NickName` (`NickName`), KEY `Status` (`Status`)
kod odpowiedzialny za sprawdzanie ktory z uzytkownikow ma najwieksza srednia glosow jest taki:
SELECT Headline, NickName, Member, COUNT(*) AS `count`, SUM(Mark)/COUNT(*) AS mark, ID, Pic_0_addon 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
... 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*