Autor Zpráva
tom39k
Profil
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
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 *
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
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
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
Vypise ti mysql nejakou chybu? viz nize.
echo mysql_error();
tom39k
Profil
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_!!
Toto téma je uzamčeno. Odpověď nelze zaslat.

0