Hej! Vad du kan göra är att skapa ett nytt index i, och sen räkna ut det så att i är något i stil med <code> prydligt! Lars, vad är det för semantiskt fel på Erics GROUP BY? Om du syftar på att han inte har några gruppfunktioner på mod_policy2 och pid, så krävs inte det i MySQL. Det är en effektiv och snyggt sätt att behålla datastrukturen och integriteten för en trästruktur.Strul med sortering, Left join...
Jag har en tabell med id och pid som skall leda sorteringen.
Exempelvis kan den se ut så här
id, pid
1 , 0
2 , 0
3 , 0
4 , 2
5 , 2
6 , 3
7 , 2
Tanken är att SQLen via en Join skall sortera ut dessa på rätt sätt sen. Dvs att pid följer efter id.
id, pid
1 , 0
2 , 0
4 , 2
5 , 2
7 , 2
3 , 0
6 , 3
Det jag gör idag är följande
SELECT
`mod_policy`.`id` AS `id`,
`mod_policy2`.`pid` AS `pid`
FROM
`mod_policy`
Left Join `mod_policy` AS `mod_policy2` ON `mod_policy`.`pid` = `mod_policy2`.`pid`
GROUP BY
`mod_policy`.`id`
Denna sql hittar så klart alla poster men soterar ut dem med alla som har pid = 0 först, och sen kommer resten.
Tacksam för hjälp
EricSv: Strul med sortering, Left join...
i = (max(id)+1) * pid + id
Vet inte om det funkar rakt av.
I övrigt finns det ett bättre sätt att lagra hierarkiska data; via left och right-värden. http://www.sitepoint.com/article/hierarchical-data-database/2Sv: Strul med sortering, Left join...
SELECT id ,
pid
FROM mod_policy
order by
case when mod_policy.pid = 0
then id
else pid end
</code>
den group du har är inte semantiskt korrekt och borde ge fel.Sv:Strul med sortering, Left join...
går det att få den att fungera i flera nivåer?
har kollat runt en hel del på webben men hittar inte direkt någon info kring sortering med case överhuvudtaget :(Sv:Strul med sortering, Left join...
Sv: Strul med sortering, Left join...
Tyvärr går det inta att snabbt och effektivt att sortera hela eller ett urval av trädet.
Om det är ett träd som sällan uppdateras kan du istället skapa ett nytt fält vilket lagrar sorterings ordning.
Du behöver bara uppdatera denna kolumn när värden läggs till, flyttas eller tas bort.
En anna struktur som påminner lite om HTML tagar är att start och slut:
-1. Root
ger:
Start Slut Text
1 1 Root
-1. Root
+2. Child
ger:
Start Slut Text
1 2 Root
2 2 Child
-1. Root
+2. Child
+3. SubChild
ger:
Start Slut Text
1 3 Root
2 3 Child
3 3 SubChild
-1. Root
+2. Child
+3. SubChild
+4. Child
+5. SubChild
+6. SubChild
ger:
Start Slut Text
1 6 Root
2 3 Child
3 3 SubChild
4 6 Child
5 5 SubChild
6 6 SubChild
Denna kod ställer stöör krav på att du som programmerare håller strukturen uppdaterad. Fördelen är dock att du kan effektit summera dela av trädet.