Autor | Zpráva | ||
---|---|---|---|
tom39k Profil |
#1 · Zasláno: 13. 11. 2008, 15:30:11
Zdravím, mám tabulku s výsledky bowlingu:
id kolo (číslo kola - každý měsíc jedno kolo) hra (číslo hry - v každém kole celkem šest her) hrac (id hráče) body (počet bodů v dané hře) do které se ukládá info o počtu bodů každého hráče v každé hře. Potřeboval bych SQL dotaz, který mi vrátí seznam hráčů seřazené podle celkového počtu bodů od kterého se ale rovnou odečte dvanáct nejhorších her každého hráče :-D myslíte že je to reálné? Něco jako: select *, sum(body)-min(body) as celkemPoOdecteni from vysledky group by hrac order by celkemPoOdecteni desc - akorád že tohle odečte jenom jeden, úplně nějhorší, výsledek každého hráče. Já potřebuji odečíst dvanáct nejhorčích výsledků.. |
||
tom39k Profil |
#2 · Zasláno: 13. 11. 2008, 16:28:39
Tak jsem s tím trochu pokročil ale narazil jsem na další problém:
select *, sum(body)-(select sum(soucetMin) from (select body as soucetMin from vysledky where hrac=1 order by body limit 12) as dotaz2) as celkemPoOdecteni from vysledky group by hrac order by celkemPoOdecteni desc timhle se mi vypíše seznam hráčů seřazený podle celkového počtu bodů od kterého je odečten součet dvanácti nejhorších výsledků hráče id 1 (where hrac=1), další problém tedy je jak do poddotazu dostat ID, které databáze práve prochází. něco v tomhle smyslu: select *, sum(body)-(select sum(soucetMin) from (select body as soucetMin from vysledky where hrac=id order by body limit 12) as dotaz2) as celkemPoOdecteni from vysledky group by hrac order by celkemPoOdecteni desc - tohle nefunguje :-) |
||
Kajman_ Profil * |
#3 · Zasláno: 13. 11. 2008, 16:34:58
Nepomůže přidat aliasy?
select v1.hrac, sum(v1.body)-(select sum(soucetMin) from (select v2.body as soucetMin from vysledky v2 where v2.hrac=v1.hrac order by body limit 12) as dotaz2) as celkemPoOdecteni from vysledky v1 group by v1.hrac order by celkemPoOdecteni desc |
||
tom39k Profil |
#4 · Zasláno: 13. 11. 2008, 16:47:06
Díky za tip, ale také bohužel nefunguje :-(
SQL-dotaz: SELECT v1.hrac, sum( v1.body ) - ( SELECT sum( soucetMin ) FROM ( SELECT v2.body AS soucetMin FROM vysledky v2 WHERE v2.hrac = v1.hrac ORDER BY body LIMIT 12 ) AS dotaz2 ) AS celkemPoOdecteni FROM vysledky v1 GROUP BY v1.hrac ORDER BY celkemPoOdecteni DESC MySQL hlásí: #1054 - Unknown column 'v1.hrac' in 'where clause' |
||
Kajman_ Profil * |
Možná to nebude nejrychlejší, ale třeba by šly použít uživatelské proměnné...
select v.hrac, sum(v.body) soucet from (select v1.*, @poradi:=@poradi*(@last_hrac=v1.hrac)+1 poradi, @last_hrac:=v1.hrac tmp from vysledky v1, (select @poradi:=0, @last_hrac:=0) t order by hrac, body) v where v.poradi>12 group by v.hrac order by soucet desc |
||
tom39k Profil |
#6 · Zasláno: 13. 11. 2008, 18:02:33
perfektní!! Děkuji! Tohle funguje a phpmyadmin mi vrátí přesně to, co potřebuji. Ale pokud to zkusím na webu, tak mi to vrátí chybu v řádku s mysql_fetch_array() , přitom by nemělo - zadávám úplně stejný dotaz jako v phpmyadminu, nevíte proč?
|
||
bohyn Profil |
#7 · Zasláno: 13. 11. 2008, 18:28:38
Vypise ti mysql nejakou chybu? viz nize.
echo mysql_error(); |
||
tom39k Profil |
#8 · Zasláno: 13. 11. 2008, 20:31:05
tak už to funguje - je to dost zvláštní, ale zkopíroval jsem sql dotaz z phpmyadmin a ten (po provedení dotazu) vypsal " (@last_hrac=v1.hrac)+1poradi " (bez mezery, správně je 1 poradi, takže "moje" chyba. Oběma Vám děkuji za rady.
zejména Kajmanovi_!! |
||
Časová prodleva: 15 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0