webForumDet fria alternativet

Halvknepig sortering...

Databaser & SQLur Databashanterare & SQL

5 svar · 396 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#1

Tabell: Bilar

id : relid : namn
1 : 0 : Coupé
2 : 0 : Kombi
3 : 0 : Lastbil
4 : 0 : Van
5 : 1 : Volvo s80
6 : 2 : Volvo 745
7 : 4 : Dodge Ram
8 : 3 : LT 31
9 : 2 : Volvo 945 GLT
10 : 1 : Saab 9000i

Nu skulle jag vilja sortera dem så här:

Coupé
Saab 9000i
Volvo s80

Kombi
Volvo 745
Volvo 945 GLT

Lastbil
LT 32

Van
Dodge Ram
Alltså, först "kategori" sedan modellen i bokstavsordning.
Hur gör jag det?

Medlem sedan dec. 20003 887 inlägg
#2

Du borde börja med att dela upp tabellen i två tabeller. En för fordon och en för fordonstyp.

Medlem sedan juni 200032 967 inlägg
#3

Jag håller med Engine^ i sak, men det går ju att lösa genom att joina tabellen med sig själv.

SELECT T2.Namn AS Kategorinamn, T1.Namn as Bilnamn [...] FROM Bilar T1 
INNER JOIN Bilar T2 ON T1.relid = T2.id 
ORDER BY T2.Namn, T1.Namn
Medlem sedan dec. 200012 464 inlägg
#4

Den joinen innebär att du inte får med de som har relid 0. Det behövs ingen join heller

select <kolumner>
   from bilar
order by case when relid = 0 then id else relid end, id
Medlem sedan juni 200032 967 inlägg
#5

Den joinen innebär att du inte får med de som har relid 0. Det behövs ingen join heller

Jag kanske missuppfattade frågan? Om vi inte har en join, då får vi ju inte ut kategorinamnen? Och 0:orna har vi väl med som T2.Namn i de bilar som har 0 som parent har någon post med relid 0 som parent?

Medlem sedan okt. 20041 556 inlägg
#6

LarsGs variant sorterade bara efter id:t.

Kan tillägga att min databas är en mySql 5.0

129 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)