---
title: "Order by time if count !=0"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/22297-order-by-time-if-count-0"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Rocket"
published: "2001-11-17T13:32:00.000Z"
updated: "2001-11-17T15:16:00.000Z"
replies: 13
views: 272
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/22297-order-by-time-if-count-0"
---

# Order by time if count !=0

## #1 — Rocket, 2001-11-17T13:32Z

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?

Permalänk: https://www.webforum.nu/p/22297

## #2 — Csson, 2001-11-17T13:39Z

Om du inte har några rader där count \< 0 kanske detta fungerar:

SELECT \* FROM links ORDER BY count ASC, time ASC

/Csson

Permalänk: https://www.webforum.nu/p/359000

## #3 — Rocket, 2001-11-17T13:46Z

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\]

Permalänk: https://www.webforum.nu/p/359001

## #4 — LarsG, 2001-11-17T14:03Z

```
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

Permalänk: https://www.webforum.nu/p/359002

## #5 — Csson, 2001-11-17T14:13Z

Tänkte inte på det...

/Csson

Permalänk: https://www.webforum.nu/p/359003

## #6 — Rocket, 2001-11-17T14:32Z

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?

Permalänk: https://www.webforum.nu/p/359004

## #7 — LarsG, 2001-11-17T14:45Z

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
```

Permalänk: https://www.webforum.nu/p/359005

## #8 — Rocket, 2001-11-17T14:53Z

Det funkar bra.

Går det fortare med en lång query istället för två mindre?

Permalänk: https://www.webforum.nu/p/359006

## #9 — LarsG, 2001-11-17T14:56Z

Kanske kanske inte.

Permalänk: https://www.webforum.nu/p/359007

## #10 — Rocket, 2001-11-17T14:58Z

Då fortsätter jag att använda två querys, det blir ju betydligt mycket lättare att skriva så i alla fall.

Permalänk: https://www.webforum.nu/p/359008

## #11 — LarsG, 2001-11-17T15:08Z

Vad som är bäst beror på vad du gör. Jag kan inte säga så mycket utan att se koden.

Permalänk: https://www.webforum.nu/p/359009

## #12 — Rocket, 2001-11-17T15:11Z

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";
   }
```

Permalänk: https://www.webforum.nu/p/359010

## #13 — LarsG, 2001-11-17T15:15Z

Alternativ 2 är effektivare.

Permalänk: https://www.webforum.nu/p/359011

## #14 — Rocket, 2001-11-17T15:16Z

Ok då vinner du :)

Permalänk: https://www.webforum.nu/p/359012

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/22297-order-by-time-if-count-0
