| Autor | Zpráva | ||
|---|---|---|---|
| Kcko Profil |
#1 · Zasláno: 31. 10. 2009, 23:18:47 · Upravil/a: Kcko
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 * |
#2 · Zasláno: 31. 10. 2009, 23:51:10
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 |
#3 · Zasláno: 1. 11. 2009, 00:42:28 · Upravil/a: Kcko
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 * |
#4 · Zasláno: 1. 11. 2009, 11:30:28
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 |
#5 · Zasláno: 1. 11. 2009, 15:06:19
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 * |
#6 · Zasláno: 1. 11. 2009, 19:32:21
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 |
#7 · Zasláno: 1. 11. 2009, 22:53:32
Ok, diky za rady.
A to modleni? :) |
||
| Alphard Profil |
#8 · Zasláno: 1. 11. 2009, 23:01:03
Kcko:
„A to modleni? :)“ Dovolím si malé OT, nechceš si to vlákno přejmenovat na: Kde se modlit ke Kajmanovi? |
||
| Kcko Profil |
#9 · Zasláno: 1. 11. 2009, 23:09:19
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 |
||
|
Časová prodleva: 17 let
|
|||
Toto téma je uzamčeno. Odpověď nelze zaslat.
0