|
[ 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)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|