Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zapytanie o uzytkownika, ktory ma..., najwyzsza srednia glosow.
mop506
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 23.01.2003

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


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*

Ten post edytował mop506 26.07.2005, 17:27:09
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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: 22.08.2025 - 01:39