---
title: "Trixig sortering"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/164663-trixig-sortering"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Travoni"
published: "2007-09-19T16:20:47.000Z"
updated: "2007-09-21T06:43:15.000Z"
replies: 12
views: 532
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/164663-trixig-sortering"
---

# Trixig sortering

## #1 — Travoni, 2007-09-19T16:20Z

Skulle vilja spotta fram en menylista med id och parentid som skall sorteras efter ett sortorder-fält.
Men...sorteringen börjar om i varje ny "parent"

```
Tbl
----------------
id  |  parentid  | linkname | sortorder

1 | 0 | Bilar    | 1
2 | 1 |    Volvo | 1
3 | 1 |    Saab  | 2
4 | 1 |    Fiat  | 3
5 | 0 | Moppar   | 2
6 | 5 |    PGO   | 1
7 | 6 |    Kymco | 2
```

DBMS är mysql 5

Här är min befintliga sql:

```
Select t1.id, CONCAT((SELECT REPEAT('&nbsp;', (COUNT(t2.parentid)))  
FROM tbl t2
WHERE t2.parentid=t1.id), t1.linkname) 
from tbl t1 
Order by t1.parentid, t1.sortorder
```

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

## #2 — Peter S, 2007-09-19T16:27Z

Har du angivit ORDER BY sortorder?

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

## #3 — Travoni, 2007-09-19T16:38Z

Ja, visst men då sorterar den ju på alla med 1 först osv.
Den skall sortera efter parentid,sortorder
Men inte det heller för då kommer alla med parentid 0 först...

R/ Första inlägget redigerat.

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

## #4 — Peter S, 2007-09-19T16:49Z

Hur skall ovanstående resultat se ut?

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

## #5 — Travoni, 2007-09-19T16:51Z

Precis som jag visade i första inlägget...vill jag att det se ut. :)

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

## #6 — aasah, 2007-09-19T17:27Z

Om det där är det önskade resultatet... hur ser då t1 och t2 ut?

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

## #7 — Travoni, 2007-09-19T17:41Z

t1 och t2 är ju samma tabell.
Nja, jag skulle nog vilja ha hjälp med hela sql:en.

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

## #8 — aasah, 2007-09-19T18:08Z

Va? Nu fattar jag absolut ingenting? :q Du svarade ju Peter med att den tabellen var önskat resultat? :q 

Men OK... Den tabell du visar är Tbl. Det är så t1 och t2 ser ut. Men om du vill ha ut **det** resultatet så räcker ju 

```
SELECT * FROM Tbl;
```

 så det utgår jag ifrån att du inte vill. Och hur ser i så fall *önskat* resultat ut?

Är det månne detta du vill ha ut? Sorterar först på parentid, sedan enligt sortOrder...

```
Select * from Tbl order by parentid, sortorder;
```

Ger
\----------------
id  \|  parentid  \| linkname \| sortorder

1 \| 0 \| Bilar    \| 1
5 \| 0 \| Moppar   \| 2
2 \| 1 \|    Volvo \| 1
3 \| 1 \|    Saab  \| 2
4 \| 1 \|    Fiat  \| 3
6 \| 5 \|    PGO   \| 1
7 \| 6 \|    Kymco \| 2

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

## #9 — Travoni, 2007-09-19T18:21Z

Ehhh, nej det är så här jag vill ha det:

```
Tbl
----------------
id  |  parentid  | linkname | sortorder

1 | 0 | Bilar    | 1
2 | 1 |    Volvo | 1
3 | 1 |    Saab  | 2
4 | 1 |    Fiat  | 3
5 | 0 | Moppar   | 2
6 | 5 |    PGO   | 1
7 | 6 |    Kymco | 2
```

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

## #10 — Travoni, 2007-09-19T18:24Z

Jag får bara

```
1 | 0 | Bilar | 1
5 | 0 | Moppar | 2
2 | 1 | Volvo | 1
3 | 1 | Saab | 2
4 | 1 | Fiat | 3
6 | 5 | PGO | 1
7 | 6 | Kymco | 2
```

eller

```
1 | 0 | Bilar | 1
2 | 1 | Volvo | 1
6 | 5 | PGO | 1
5 | 0 | Moppar | 2
3 | 1 | Saab | 2
7 | 6 | Kymco | 2
4 | 1 | Fiat | 3
```

Alltså på parentid eller på sortorder(i felaktig ordning)

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

## #11 — aasah, 2007-09-20T19:57Z

Det är ju Tbl rätt upp och ner: SELECT \* FROM Tbl;

Om det nu är så att Tbl inte finns i databasen utan du vill ta fram den via en SQL-fråga så **måste** du tala om för oss hur de tabeller du vill använda för att bygga den ser ut. Dvs hur ser den tbl som du kallar t1 i din ursprungliga fråga ut?

> **Travoni skrev:**
>
> Ehhh, nej det är så här jag vill ha det:
>
> ```
> Tbl
> ----------------
> id  |  parentid  | linkname | sortorder
> 
> 
> 1 | 0 | Bilar    | 1
> 2 | 1 |    Volvo | 1
> 3 | 1 |    Saab  | 2
> 4 | 1 |    Fiat  | 3
> 5 | 0 | Moppar   | 2
> 6 | 5 |    PGO   | 1
> 7 | 6 |    Kymco | 2
> ```

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

## #12 — Gladh, 2007-09-21T06:19Z

> **aashah skrev:**
>
> Om det nu är så att Tbl inte finns i databasen utan du vill ta fram den via en SQL-fråga så måste du tala om för oss hur de tabeller du vill använda för att bygga den ser ut. Dvs hur ser den tbl som du kallar t1 i din ursprungliga fråga ut?

Är det inte så att tabell strukturen ser ut som exemplet, men datan ligger instoppad huller om buller, så posten "Bilar" har inte id:1 i databasen men kanske 8 och sedan så har "moppar" id:9 medans Fiat har id:10 osv osv..

de id:en som man ser i exemplet är på hittade värden, men fälten finns i tabellen.

Det enklaste sättet är att lägga ihop sortorder för din parent och dess barn, så det blir så här.

```
1 | 0 | Bilar    | 1
2 | 1 |    Volvo | 11
3 | 1 |    Saab  | 12
4 | 1 |    Fiat  | 13
5 | 0 | Moppar   | 2
6 | 5 |    PGO   | 21
7 | 6 |    Kymco | 22
```

Det är dock inte så dynamiskt, eftersom du just nu endast kan ha 9 Parents, sedan får du problem, eller så delar du upp de i 2 kolumner:

```
1 | 0 | Bilar    | 1|0
2 | 1 |    Volvo | 1|1
3 | 1 |    Saab  | 1|2
4 | 1 |    Fiat  | 1|3
5 | 0 | Moppar   | 2|0
6 | 5 |    PGO   | 2|1
7 | 6 |    Kymco | 2|2
```

Nu kan du sortera skriva ORDER BY \[näst sista kolumnen\], \[sista kolumnen\].

\- M

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

## #13 — Travoni, 2007-09-21T06:43Z

Det var så jag tänke, tack!

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/164663-trixig-sortering
