Autor Zpráva
Kcko
Profil
Rad bych upozornil na chybu v tomto topicu v bodu cislovani radku.

Jsou tam uvedene 2 zpusoby, oba jsem zkousel a nefunguji stejne.

Prvni se vyhodnoti a ocisluje radky spravne, druhy nikoliv. ( Verze Mysql 5.0+)


DOBRE
 SET @counter :=0;
SELECT SUM( v *3 ) + SUM( r *1 ) + SUM( p * -3 ) usp, (
gf - ga
)goal_diff, pz, hrac, @counter := @counter +1 AS rank_nejhorsi
FROM bilance
WHERE datum = '2009-10-30'
GROUP BY hrac
ORDER BY usp ASC , goal_diff ASC 


SPATNE
SELECT 
	SUM( v * 3 ) + SUM( r * 1 ) + SUM( p * -3 ) usp,
	(gf - ga)  goal_diff,
	pz,
	hrac,
	@counter := @counter + 1  as rank_nejhorsi
	FROM (SELECT @counter := 0) as x, bilance
	WHERE datum = '2009-10-30' 
	GROUP BY hrac
	ORDER BY  usp ASC, goal_diff ASC
Kajman_
Profil *
Složité dotazy, např. s tím group by, zkus dát jako poddotaz misto tabulka. Nebo používej ten první, pokud máš problém implementovat druhý :-)
Kcko
Profil
Kajman:
;) no dobre no, nenapadlo me to nejak


SELECT 
    bbb.*,
    @counter := @counter + 1  as rank_nejhorsi
    FROM (SELECT @counter := 0) as x, 
(SELECT SUM( v * 3 ) + SUM( r * 1 ) + SUM( p * -3 ) usp,
    (gf - ga)  goal_diff,
    pz,
    hrac
FROM bilance
    WHERE datum = '2009-10-30' 
    GROUP BY hrac
    ORDER BY  usp ASC, goal_diff ASC) as  bbb




Kajmane, abych nezakladal nove topicy jak lolek

=> tabulka
=================================================
hrac | datum | poradi_nejlepsi | poradi_nejhorsi | poradi_nejaktivnejsi

Jak nenasilne vytahnout vsechny dny a ke kezdemu dni nejlepsiho, nejhorsi a nejaktivnejsiho hrace?


PS. Dotazum tohoto typu

SELECT DISTINCT datum,
(SELECT hrac FROM bilance WHERE datum = b.datum AND rank_nejlepsi = 1) nejlepsi,
(SELECT hrac FROM bilance WHERE datum = b.datum AND rank_nejhorsi = 1) nejhorsi,
(SELECT hrac FROM bilance WHERE datum = b.datum AND rank_nejaktivnejsi = 1) nejaktivnejsi,
FROM bilance b 
ORDER BY datum


bych se rad vyhnul, jelikoz v tomto pripade znam pouze jejich ID a zase nad to musim nabalovat dalsi select a navic opet si muzu zobrazit pouze jednoho hrace ( kdyby chtel treba LIMIT 5 pro kazde poradi za urcity den tak mam smulu )

Lze to nebo se opet jedna o to co jsme resili dnes / vcera? ;-)
Kajman_
Profil *
V tom prvním bych order by nedával do závorky.

K tomu druhému... asi by se dalo využít toho, že budou ranky vždy nastavené, jedinečné a v rozmezí 1 až n, pak by mohlo být něco takového
select * from
(SELECT DISTINCT datum
FROM bilance) d
join bilance b1 on d.datum=b1.datum and b1.rank_nejlepsi<=5
join bilance b2 on d.datum=b2.datum and b2.rank_nejhorsi=b1.rank_nejlepsi
join bilance b3 on d.datum=b3.datum and b3.rank_nejaktvinejsi=b1.rank_nejlepsi
ORDER BY datum, b1.rank_nejlepsi
Kcko
Profil
Kajman:

add 1) Proc nedavat do zavorky? Je to funkcni ( nebo jak to ma vypadat)
add 2) Vyborne, funguje, ostatne jako vzdy

Jsem ateista, ale kde se muzu modlit k tvoji osobe? ;-)
Kajman_
Profil *
Proc nedavat do zavorky?

Nejsem si jistý, ale db nemusí zachovat řazení z nějakého poddotazu. Když řazení není jednoznačně určené, tak si ho může dát libovolně.

Stejně tak možná bude rychlejší prvně vše sečíst a pak násobit trojkou, než každou výhru vynásobit trojkou a tohle teprve sčítat. Ale to možná ani nebude měřitelný rozdíl.
Kcko
Profil
Ok, diky za rady.
A to modleni? :)
Alphard
Profil
Kcko:
A to modleni? :)
Dovolím si malé OT, nechceš si to vlákno přejmenovat na: Kde se modlit ke Kajmanovi?
Kcko
Profil
Nechci, jelikoz primarne jsme tu resili skutecny problem, nicmene Kajman je zde MYSQL modlou, uz nekolikrat pomohl a rozsiril mi obzory, takze ho musim zacit uctivat ;-)

Lockuju
Toto téma je uzamčeno. Odpověď nelze zaslat.