Pomoc s jednym query – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pomoc s jednym query – MySQL – Fórum – Programujte.comPomoc s jednym query – MySQL – Fórum – Programujte.com

 

dalaman0
Věrný člen
28. 6. 2009   #1
-
0
-

Ahojte,

mam takuto tabulku (aj s ukazkovymi hodnotami):
http://files.getdropbox.com/u/80731/db.png

Je to tabulka vysledkov hadzania sipok v jednej sutazi. Vyznam stlpcov je samovravny. Sutaz sa kona kazdy mesiac (stlpce month, year) a prebieha vo viacerych kolach (stplec round) .

Uz som z nej vytiahol kopu statistik a prehladov, no teraz som narazil na jeden problem:

Vytiahnite uzivatelov, ktori maju najvacsi pocet vyhratych kol.
(vyhrate kolo - najviac bodov z riadkov s rovnakymi stplcami round,month a year)

p.s. viacerymi cyklami a pomocnymi poliami cez php to problem nie je... no rad by som to nehal iba na sql server

Nahlásit jako SPAM
IP: 78.98.224.–
Lepšie je mať psa na saláme ako salámu pod psom !!!
Jura
~ Anonymní uživatel
637 příspěvků
28. 6. 2009   #2
-
0
-

Čau,

neručím za správnost, ale na tohle se používá grupování, takže snad nějak takto:



SELECT user_uid, SUM(points) AS [Score]
FROM Nazev_tabulky
GROUP BY user_uid, round, month, year

Nahlásit jako SPAM
IP: 85.207.192.–
dalaman0
Věrný člen
28. 6. 2009   #3
-
0
-

grupovanie pouzivam casto, no teraz ho neviem akosi napasovat...

Bo ono treba:
1. najst vytazov jednotlivych kol
2. zratat pocet vytazstiev kazdeho uzivatela
3. zoradit vysledok a limitovat na 5

no neviem ci to pojde v jednom query

Nahlásit jako SPAM
IP: 78.98.224.–
Lepšie je mať psa na saláme ako salámu pod psom !!!
bukaj_0010
Věrný člen
28. 6. 2009   #4
-
0
-

dalaman

SELECT points.user_uid AS user_uid, COUNT(winners_points.points) AS winnings 

FROM tabulka AS points
LEFT JOIN (
SELECT year, month, round, MAX(points) AS points
FROM points
GROUP BY year, month, round
) AS winners_points ON points.year = winners_points.year AND points.month = winners_points.month AND
points.round = winners_points.round AND points.points = winners_points.points
GROUP BY points.user_uid
ORDER BY winnings DESC
LIMIT 5

Poddotazem se vytáhnou vítězné body jednotlivých kol a pak už se jen zjistí, kolikrát který hráč vyhrál. Docela zběsilé a obával bych se výkonnosti při hodně řádcích v tabulce, ale je to jeden dotaz :o)

Nahlásit jako SPAM
IP: 88.101.128.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
dalaman0
Věrný člen
29. 6. 2009   #5
-
0
-

SUPEEEEER

mal som nieco velmi podobne.. Nevedel som zistit kde je chyba a som zistil prave ze ked vykonam toto query:

SELECT year, month, round, MAX(points) AS points

FROM darts_points
GROUP BY year, month, round

tak mi vrati user_uid z ineho riadku ako naslo MAX(points) - asi najskor vytiahne prve user_uid a az potom najde maximum

Ty si bol sikovnejsi a vytiahol si si tu hodnotu cez podmienky vo WHERE
GOOD WORK

Vysledny kod po dopracovani (o jeden join viac - pre zistenie mena usera) :D
SELECT darts_user.name,bestWinners.winnings FROM

(
SELECT points.user_uid AS user_uid, COUNT(winners_points.maxPoints) AS winnings
FROM darts_points AS points
LEFT JOIN
(
SELECT year, month, round, MAX(points) AS maxPoints
FROM darts_points points
GROUP BY year, month, round
) AS winners_points
ON points.year = winners_points.year AND points.month = winners_points.month AND
points.round = winners_points.round AND points.points = winners_points.maxPoints
GROUP BY points.user_uid
) bestWinners INNER JOIN darts_user
ON darts_user.uid = bestWinners.user_uid
ORDER BY bestWinners.winnings DESC
LIMIT 5


p.s. je to db do 1000 zaznamov... cize vykonnost netreba moc riesit

Nahlásit jako SPAM
IP: 78.98.218.–
Lepšie je mať psa na saláme ako salámu pod psom !!!
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 21 hostů

Podobná vlákna

Session vs. Query do DB — založil jerkyrama

Query string — založil 3bit

Okamžitá QUERY — založil Jetti

Error: query was empty — založil Ilja

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý