---
title: "Sortering av id blir fel"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/42645-sortering-av-id-blir-fel"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Elric"
published: "2002-04-28T12:51:27.000Z"
updated: "2002-04-28T17:16:03.000Z"
replies: 5
views: 253
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/42645-sortering-av-id-blir-fel"
---

# Sortering av id blir fel

## #1 — Elric, 2002-04-28T12:51Z

Jag försöker sortera några id-värden som ser ut så här: 1.1, 1.2, 1.3 osv. När jag använder denna förfrågan:

```php
$result = mysql_query("SELECT * FROM tabell WHERE något = '$något' ORDER BY id",$db)
```

 så sorteras dom så här: 1.1, 1.10, 1.11, 1.2, 1.3 osv, men jag vill att dom skall sorteras så här: 1.1, 1.2, 1.3 ... 1.10, 1.11, 1.12 osv
Tabellfältet som jag använder är VARCHAR. Går detta inte att göra med ORDER BY och VARCHAR?

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

## #2 — LarsG, 2002-04-28T13:02Z

Det är korrekt sortering för ett karaktärsfält.

Om du vill sortera enligt det numeriska värdet så får du byta datatyp till decimal eller float.

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

## #3 — Elric, 2002-04-28T13:41Z

Men det går alltså inte att sortera ett VARCHAR-fält på det viset som jag vill?
Jag kan inte gå över till INT,FLOAT eller DECIMAL eftersom att jag har en punkt i värdet, eller går det att göra?

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

## #4 — LarsG, 2002-04-28T14:00Z

Punkt används som decimalavgränsare i SQL så det går ju att lagra som decimal. Om du inte vill byta datatyp så kan du ju försöka att konvertera värdet till decimal. Normalt sett så skulle man använda cast men mysql har (som vanligt) ett begränsat stöd för det och det finns inget sätt att explicit konvertera något till decimal enligt dokumentationen. Det är möjligt att det går med något som detta

```
select * from t order by id + 0.0
```

Jag vet inte om det fungerar men Mysql verkar ha en (i negativ bemärkelse) flexibel hantering av implicita typkonverteringar.

Om du har värden som kan innehålla flera punkter (t.ex. kapitelnummer) så är det inte så lätt. En möjlighet är att ha ett extra fält som anger sorteringsordningen.

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

## #5 — Elric, 2002-04-28T14:33Z

Ok tack ska du ha :)
Jag har märkt att om jag skriver numren så här: 1.01, 1.02, 1.03 ... 1.10, 1.11, så sorteras dom rätt eller så går jag över till id# utan punkt. Får se hur jag gör.

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

## #6 — Elric, 2002-04-28T17:16Z

Jag fick tag på en lösning på ett annat ställe, kanske är någon som har nytta ut av det:

```php
ORDER BY left(id, locate('.', id) -1) + 0, substring(id,(locate('.', id) + 1)) + 0
```

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/42645-sortering-av-id-blir-fel
