Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Da li je ovo bug?

[es] :: MySQL :: Da li je ovo bug?

[ Pregleda: 1479 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Da li je ovo bug?27.10.2009. u 20:08 - pre 175 meseci
Imam ovakav upit:
Code:
(SELECT item.title, item.title_url_format, (COUNT(parent.id) - 1) AS 'depth'
FROM entries item, entries parent
WHERE (item.lft BETWEEN parent.lft AND parent.rgt) AND item.type = 'item' AND item.status = 'published'
GROUP BY item.id
ORDER BY item.lft)
UNION ALL 
(SELECT title, 'page', 0 FROM pages ORDER BY id)

Ne obraćajte pažnju na sam upit i njegovu namenu. Problem je što taj ORDER BY u prvom upitu kao da ne funkcioniše. A zanimljivo je što se to javlja samo u ovom slučaju sa UNION, jer kada ga isprobam kao samostalan upit, radi kako treba i rezultati su lepo sortirani, pa se ja pitam da li je to samo još jedan bug?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Da li je ovo bug?27.10.2009. u 20:40 - pre 175 meseci
Citat:

ORDER BY for individual SELECT statements within parentheses has an effect only when combined with LIMIT. Otherwise, the ORDER BY is optimized away


dakle - nije bug
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: Da li je ovo bug?27.10.2009. u 21:07 - pre 175 meseci
Da stvarno, kad mi dodam LIMIT radi lepo... Samo mi se sad i nije neko rešenje da stavim nenormalan LIMIT, recimo 1000. Jel postoji možda još neki hack za ovaj problem?

A nije mi jasno zašto je to tako, i zašto uopšte postoji taj izuzetak kod upita koji su "ugnježdeni" (između zagrada). :S
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Da li je ovo bug?27.10.2009. u 21:25 - pre 175 meseci
ANSI SQL standard :) ....

mysql je do 4.1.xx postovao taj order by a onda je od te neke verzije prestao zato sto po ANSI standardu to ne treba (nije problem ako postujes ali ne moras) da se postuje a ako se izbaci taj order by mysql optimizer moze da izvrsi dodatne optimizacije koje ce taj komplet upita odraditi brze.

dodatno, imas issue, opet po ansi standardu, i opet vrlo cesta greska kod klijenata ... ako tvoj "konacni" upit nema ORDER BY, redosled po kom ce ti mysql vratiti podatke je "NEPOZNAT" ... sta to znaci ... cak i ako koristis LIMIT to ce samo odrediti koji podaci ce se naci u tim upitima u zagradi a rezultat ce biti sortiran "prvi" pa "drugi" samo zato sto je tako "slucajno brze" ... ali ti to nije garantovano!!!! mozda ce u sledecoj verziji to da ti vrati skroz izmesano!!

imas isto standardan primer ... select * from t1 where a>b; ce ti vratiti ako je t1 innodb tabela podatke sortirane po primarnom kljucu iako ne postoji nikakav order by u upitu - ali ti to mysql ne garantuje!! .. isto tako, ako imas single node cluster, taj upit ce ti vratiti podatke sortirane po pk-u, ali ako imas 4 node cluster dobices podatke koji su "skoro random" (tj dobices sortirane grupe od po 25% podataka medjusobno mergeovane) ... zo, ako oces da ti vrati upit sortirane podatke, dodas jedan order by na kraj...

za tvoj upit, ako ti je bitno da budu, prvo prvi pa onda drugi ... uradis nesto tipa

Code:

(
SELECT item.title as A, item.title_url_format as B, (COUNT(parent.id) - 1) AS C, item.lft as D, 0 as E
FROM entries item, entries parent
WHERE (item.lft BETWEEN parent.lft AND parent.rgt) AND item.type = 'item' AND item.status = 'published'
GROUP BY item.id
)
UNION ALL 
(
SELECT title as A, 'page' as B, 0 ac C, id as D, 1 as E FROM pages
)
ORDER BY E,D;



nadam se da je "trik" jasan
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: Da li je ovo bug?27.10.2009. u 22:22 - pre 175 meseci
Aha, kapiram. Hvala na detaljnim objašnjenjima i "triku".
 
Odgovor na temu

[es] :: MySQL :: Da li je ovo bug?

[ Pregleda: 1479 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.