[ 5h0ck @ 03.06.2008. 19:18 ] @
Recimo da imam upis brojeva u bazu od 1 do 10.

Želim da napravim redosled od 5 pa na dalje, pa kada dođe do kraja, krene od manjih brojeva, tako da mi rezultat bude:

5, 6, 7, 8, 9, 10, 1, 2, 3, 4

Išao sam nekim optimističkim putem ORDER BY brojevi > 5, ali ništa

Ima li rešenja? tnx
[ chachka @ 03.06.2008. 19:29 ] @
Code:
ORDER BY (brojevi+5) % 10
napomena: % = mod, ostatak pri celobrojnom deljenju
[ 5h0ck @ 03.06.2008. 21:39 ] @
Hvala na brzom odgovoru, međutim, brojevi su navedeni kao primer inače sam mislio do poslednjeg u nizu.

Proba samo da stavim
Code:
ORDER BY (brojevi<5)

bez % 10 i dobio sam to što sam tražiopočeo je listu sa brojem 5 otišao do poslednje (u ovom slučaju 10) i nastavio sa 1.

Onda sam probao isto to da primenim na datume
Code:
$Today = date("Y-m-d");
.... ORDER BY (date<$Today) ;


I nije mi izbacio ispravan redosled!
[ Zmaj @ 03.06.2008. 23:52 ] @
odakle vam ideja da uslov moze da ide u order?

uslov ti ide u WHERE, znaci ovako:

Code:

SELECT brojevi
FROM neka_tabela
WHERE brojevi > 5
ORDER BY brojevi


ovo je pocetnicko pitanje, a odgovor je jos gori, prouci neki tutorijal za SQL pre nego sto postavis pitanje
[ 5h0ck @ 04.06.2008. 00:36 ] @
A ti bi mogao pre nego odgovoriš da pročitaš šta sam napisao.

Code:
WHERE brojevi > 5
mi nikada neće izbaciti brojeve manje od 5 zar ne?

Ovde pričamo o redosledu prikazivanju, a ne o uslovu.
[ stsung @ 04.06.2008. 01:27 ] @
Pozd.

Logichki gledano, a mislim i najjednostavnije, bilo bi:

Code:

...
ORDER BY IF(broj >= 5,0,1),broj


Umesto 5 moguce je naravno staviti bilo koji broj. Ne mogu reci da bash volim ovakva reshenja, no, reshenje je tu.

Svako dobro.
[ 5h0ck @ 04.06.2008. 09:34 ] @
Ok, sada je meni to jasno i funkcionišu oba predloga, ali nijedan ne funkcioniše kada su datumi u pitanju. Znači, neće da napravi redosled ako je 2008-06-07 >= 2008-06-04

???

Hvala
[ Gojko Vujovic @ 04.06.2008. 09:38 ] @
Da ih pretvoris u unix timestamp? Onda bi trebalo da radi.
[ chachka @ 04.06.2008. 10:38 ] @
Nadam se da nisi zaboravio apostrofe, jer je 2008-06-07 >= 2008-06-04 ustvari poredjenje dva integera 1995 >= 1998 što daje 0.
[ 5h0ck @ 04.06.2008. 10:41 ] @
pretovrio sam u timestamp i to je to! Slučaj rešen.

Hvala broju 1 i svima ostalima!
[ stsung @ 04.06.2008. 20:37 ] @
Pozd.

Moram ti napomenuti da varijanta

ORDER BY IF(broj >= 5,0,1),broj

treba da radi najnormalnije i sa datumom

ORDER BY IF(datum >= '2008-06-04',0,1),datum

Prvo reshenje (sa modulus po 10) nije praktichno, jer prvo, manje je optimizovano za izvrshavanje, a drugo, kada su u pitanju brojevi dozvoljava samo brojeve <= 10 (za brojeve vece od 10 ce pokvariti ORDER kakav zhelish da postignesh), dok sa datumima jednostavno nema smisla.

Svako dobro.
[ Ivan Stanojevic @ 17.06.2008. 06:50 ] @
zanimljivo resenje sa IF

mada, terbalo bi videti sta je optimalnije:

mozda neki union brze odradi posao

(select * from brojevi where broj>=5 order by broj) union (select * from brojevi where broj<5 order by broj)