Autor | Zpráva | ||
---|---|---|---|
TomášK Profil |
#1 · Zasláno: 10. 11. 2009, 21:46:43
Mám dotaz, který sestaví pořadí a očísluje záznamy pomocí proměnné:
SET @poradi:=0; SELECT @poradi := @poradi+1 AS poradi, body, pomocne_body ... FROM /* dotaz obsahujici nekolik joinu s poddotazy, groupovani apod., neobsahujici @poradi */ ORDER BY body DESC, pomocne_body DESC; Dlouho ho používám bez problémů, ale teď mi začal vracet podivné výsledky - pravděpodobně po upgradu MySQL na 5.1. Na serveru se starší verzí MySQL se chová dál dle očekávání - vrátí očíslované záznamy seřazené dle bodů. Na testovacím serveru očísluje záznamy dle jiného kritéria než je v ORDER BY (pravděpodobně náhodně), např. takto: +------------------------+--------------+ | @poradi := @poradi + 1 | body | +------------------------+--------------+ | 98 | 321 | | 72 | 286 | | 13 | 269 | | 26 | 256 | | 30 | 234 | Setkal se někdo s podobným problémem při přechodu na novou verzi? Lze spolehlivě číslovat bez použití procedur? |
||
nightfish Profil |
#2 · Zasláno: 11. 11. 2009, 07:28:37
otestováno na 1 tabulce (žádné joiny atd.) na mySQL 5.1.39 a 5.4.1 a funguje správně
TomášK: „(pravděpodobně náhodně)“ nemohlo by se stát, že to nejdřív všechny řádky očísluje, a až pak je to seřadí podle `body`? |
||
Kajman_ Profil * |
#3 · Zasláno: 11. 11. 2009, 08:43:06
TomášK:
Nepomůže zanořit řazení? select poradi, body from (select ... order by body) t order by body |
||
TomášK Profil |
#4 · Zasláno: 11. 11. 2009, 19:31:18
nightfish:
Pravděpodobně ano - ale myslím, že nikde není řečeno, jak řádky budou seřazené před očíslováním - tudíž je to pro mě totéž jako náhodné. Kajman Dík, pomohlo. Funguje mi to i bez řazení v poddotazu, tj takto: SELECT poradi, body FROM ( SELECT * FROM /*slozity dotaz bez order */ ) t ORDER BY body Neví někdo, jestli je to bug nebo MySQL jen nezaručuje, kdy se proměnná přiřadí? Jde mi hlavně o to, jestli se to v příští verzi může zase 'rozbít'... |
||
Časová prodleva: 16 let
|
0