RocketMedlem sedan feb. 2000372 inlägg Nu ordnar jag det som hämtat från databasen efter tiden, med den här raden:
mysql_query("SELECT * FROM links ORDER BY time”)
Men jag vill lägga till att om count=0 så ska dessa läggas först. Kan man göra det direkt i ”queryn”? Det ska alltså vara så att alla som har count=0 ska komma först sorterade efter time. Efter det så ska alla andra komma sorterade efter time.
Går detta att fixa i en query? Jag vet att det inte är svårt att fixa i flera men går det i en?
CssonMedlem sedan feb. 2000438 inlägg Om du inte har några rader där count < 0 kanske detta fungerar:
SELECT * FROM links ORDER BY count ASC, time ASC
/Csson
------------------
Erimax.com
Cykelsemester
[Redigerat av Csson den 17 nov 2001]
RocketMedlem sedan feb. 2000372 inlägg Nej det blir fel. Enligt det du skrev så sorterar den i första han efter count, alltså först count=0 sen =1 =2 o.s.v. Jag vill alltså ha det så att count=0 kommer först sedan ska bara time spela roll, alltså.
SELECT * FROM links ORDER BY count (if count=0), time
Vad betyder ASC ?
[Redigerat av Rocket den 17 nov 2001]
LarsGMedlem sedan dec. 200012 464 inlägg SELECT * FROM links ORDER BY case when count = 0 then 0 else 1 end ASC, time ASC
ASC är en förkortning av ascending, dvs stigande
Du kan ange DESC (descending) för att få sorteringen i fallande ordning.
OT: Count är inget bra namn då det är ett reserverat ord i många SQL-dialekter
------------------
essentitia preter non sans multiplicandum
CssonMedlem sedan feb. 2000438 inlägg Tänkte inte på det...
/Csson
------------------
Erimax.com
Cykelsemester
RocketMedlem sedan feb. 2000372 inlägg Kan man få en förklaring för raden:
case when count = 0 then 0 else 1 end
Kan man göra så att när count=0 så sorteras time med nyaste först men näst count!=0 så är den nyaste sist?
LarsGMedlem sedan dec. 200012 464 inlägg Tja, det fungerar som en funktion, om uttrycket count = 0 är sant så returneras värdet 0 annars 1
Vilken datatyp är time ? Om det är ett datum så borde det bli något så här.
order by case when count = 0 then 0 else 1 end asc, case when count = 0 then time else '0000-00-00' end desc,
case when count = 0 then '9999-12-31' else time end asc
------------------
essentitia preter non sans multiplicandum
RocketMedlem sedan feb. 2000372 inlägg Det funkar bra.
Går det fortare med en lång query istället för två mindre?
LarsGMedlem sedan dec. 200012 464 inlägg Kanske kanske inte.
------------------
essentitia preter non sans multiplicandum
RocketMedlem sedan feb. 2000372 inlägg Då fortsätter jag att använda två querys, det blir ju betydligt mycket lättare att skriva så i alla fall.
LarsGMedlem sedan dec. 200012 464 inlägg Vad som är bäst beror på vad du gör. Jag kan inte säga så mycket utan att se koden.
------------------
essentitia preter non sans multiplicandum
RocketMedlem sedan feb. 2000372 inlägg Alternativ 1:
$result = mysql_query("SELECT * FROM links WHERE count='0' ORDER BY time DESC") OR DIE(mysql_error());
while($rad = mysql_fetch_array($result)){
echo "<a href=\"$PHP_SELF?id=$rad[id]&go=1&url=$rad[url]&\" target=\"_blank\">$rad[name]</a><br>\n";
}
$result = mysql_query("SELECT * FROM links WHERE count!='0' ORDER BY time") OR DIE(mysql_error());
while($rad = mysql_fetch_array($result)){
echo "<a href=\"$PHP_SELF?id=$rad[id]&go=1&url=$rad[url]&\" target=\"_blank\">$rad[name]</a><br>\n";
}
Alternativ 2:
$result = mysql_query("SELECT * FROM links order by case when count = 0 then 0 else 1 end asc, case when count = 0 then time else '00000000000000' end desc, case when count = 0 then '99991231000000' else time end asc") OR DIE(mysql_error());
while($rad = mysql_fetch_array($result)){
echo "<a href=\"$PHP_SELF?id=$rad[id]&go=1&url=$rad[url]&\" target=\"_blank\">$rad[name]</a><br>\n";
}
LarsGMedlem sedan dec. 200012 464 inlägg Alternativ 2 är effektivare.
------------------
essentitia preter non sans multiplicandum