webForumDet fria alternativet

Trixig sortering

12 svar · 510 visningar · startad av Travoni

TravoniMedlem sedan okt. 20041 556 inlägg
#1

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(' ', (COUNT(t2.parentid)))  
FROM tbl t2
WHERE t2.parentid=t1.id), t1.linkname) 
from tbl t1 
Order by t1.parentid, t1.sortorder
Peter SMedlem sedan dec. 20025 483 inlägg
#2

Har du angivit ORDER BY sortorder?

TravoniMedlem sedan okt. 20041 556 inlägg
#3

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.

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Hur skall ovanstående resultat se ut?

TravoniMedlem sedan okt. 20041 556 inlägg
#5

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

aasahMedlem sedan mars 20034 471 inlägg
#6

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

TravoniMedlem sedan okt. 20041 556 inlägg
#7

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

aasahMedlem sedan mars 20034 471 inlägg
#8

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

TravoniMedlem sedan okt. 20041 556 inlägg
#9

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
TravoniMedlem sedan okt. 20041 556 inlägg
#10

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)

aasahMedlem sedan mars 20034 471 inlägg
#11

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
GladhMedlem sedan maj 20012 812 inlägg
#12

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

TravoniMedlem sedan okt. 20041 556 inlägg
#13

Det var så jag tänke, tack!

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