[ bciric @ 11.12.2009. 18:44 ] @
Zasto se ovaj upit
SELECT distinct username FROM `fotografija` ORDER BY `fotografija`.`id` DESC

razlicito izvrsava na razlicitim serverima, radi se o istoj bazi podataka,

izbaci on tacne podatke ali ih razlicito sortira

gde bi moglo da bude graska?

unapred hvala
[ bogdan.kecman @ 11.12.2009. 18:59 ] @
radi razlicito zato sto upit radi tako sto prvo pokupi samo distinct vrednosti za username i onda to sortira po id-u. ako imas user "pera" sa id 10 i sa id 20 ne postoji "pravilo" po kom ce mysql da odredi da ti vrati peru sa 10 ili sa 20 .. vratice ti "jednog od ta dva" (vratice onaj na koji prvi naidje) tako da ako na serveru 1 imas fragmentisanu tabelu tako da prvo naidje na peru sa id 10 vratice njega a na drugom serveru naidje na peru sa id 20 prvo - vratice njega ... isto tako ako imas miku sa 11 i 21 na jednom serveru ce da vrati jedan a na drugom drugi (ili isti na oba) tako da ces na jednom mozda imati pera, mika a na drugom mika, pera jednom kada cimnes upit .. sutradan vec taj isti upit moze da ti na prvom vrati mika, pera a na drugom pera, mika ... tako da .. taj order by ti je potpuno beskoristan .. sortiraj po username to jedino ima smisla u distinct selectu
[ bogdan.kecman @ 11.12.2009. 19:00 ] @
da .. ako uradis "optimize table" na oba servera i posle toga piknes upit (ako je baza ista) vrlo verovatno ces da dobijes isti rezultat ... ali ne zadugo :)
[ bciric @ 12.12.2009. 09:14 ] @
ma na jednom serveru to radi vec godinu dana i OK je, bas sortira po id fotografije i daje username autora.

a sad sam to postavio na drugi server,( a nece ni kod mene na lokalhostu), i na taj drugi zeza, a ista tabela je u pitanju

kako da uradim optimizaciju? meni je na drugom serveru tabela trenutno na oko 100 zapisa
[ bogdan.kecman @ 12.12.2009. 09:59 ] @
kao sto rekoh mozes da probas "optimize table tabela1" ... mada, tu imas problem da taj redosled moze da se menja kroz verzije .. tako da ako nemas identicnu verziju ko tamo ne mora da znaci ni da ce optimize da odradi posao ...

probaj:
Code:

SELECT `username`, max(`id`) as `mid` FROM `fotografija` GROUP BY `username` ORDER BY `mid` DESC;


to bi trebalo da ti vrati rezultat koji ocekujes - uvek isti na svakom serveru

[ bciric @ 12.12.2009. 11:18 ] @
Hvala puno, ovo je OK

pozdrav
[ bogdan.kecman @ 12.12.2009. 14:06 ] @
sta je fora .. od 5.x mysql sve sto nije definisano standardom da mora da bude "po ovom redosledu" ne radi po tom redosledu ... do 4.1 bi ovaj upit uvek vracao to sto "ocekujes" dakle onaj tvoj i ovaj moj upit bi uvek vracali isti rezultat, ali negde od 5.0 (cak i neke stvari tokom 4.1) se dosta tih stvari izbacilo kako bi se radilo na optimizaciji te ono sto nije obavezno po standardu ma koliko logicno bilo ne radi ... te moras nedvosmisleno u upitu da napises sta hoces da bi dobio rezultat koji ocekujes (kao npr moj upit u poredjenju sa tvojim)...
[ bciric @ 12.12.2009. 16:58 ] @
kod mene na lokalu je verzija 5.1.33 mysql
i dve razlicite baze sa istom tabelom fotografije testiram ovim mojim upitom jedna vraca kao sto i ocekujem, a druga nesto bezveze (bas kao sto si mi reko vraca neki tamo id a ne poslednji)

mada sad sam resio problem ovim tvojim upitom

pozdrav