Ik heb een tabel met grofweg de volgende layout:
Tabelnaam "pages"
id int(20) autoincrement
sort int(3)
parent_id int(20)
Alsmede wat velden met inhoud (webpagina's). De "parent_id" is een veldje dat naar NULL of een andere pagina verwijst en geeft de boomstructuur aan. Het "sort" veldje wordt gebruikt om de positie onder een tak (= parent_id) van de boomstructuur aan te geven.
Bij het verschuiven van pagina's moeten de nummers in "sort" worden aangepast, het meest efficiënte is hier om in "sort" alleen even nummers op te nemen; het omhoog schuiven van een pagina is nu een kwestie van sort met 2 verlagen, overige verplaatsingen zijn ook kinderspel geworden; ik hoef me niet druk te maken om omliggende pagina's. Echter moeten alle sort-nummertjes nu weer herschikt worden. Momenteel kost me dat één tussentabel en twee queries maar ik wil het graag in één update-query hebben.
De volgende query lepelt de regelnummers op zoals deze in een update query...
SELECT COUNT(*)*2
FROM pages p1
, pages p2
WHERE p1.sort >= p2.sort
AND p2.parent_id = 1
GROUP BY p1.id
ORDER BY p1.sort
In normale SQL zou ik hier direct een update-query van moeten kunnen maken (eventueel als subselect) maar MySQL 3.x staat me dit niet toe, iemand tips/hints/de oplossing???
Ik weet dat mijn methode enigszins als een omweg klinkt (hoewel het vrij efficiënt is gezien het lage aantal queries dat maximaal nodig is) dus als je een betere manier weet om die sortering te regelen zónder het risico te lopen alle omliggende pagina's in een tak één voor één te moeten hernummeren dan ben ik ook geïnteresseerd.
Tabelnaam "pages"
id int(20) autoincrement
sort int(3)
parent_id int(20)
Alsmede wat velden met inhoud (webpagina's). De "parent_id" is een veldje dat naar NULL of een andere pagina verwijst en geeft de boomstructuur aan. Het "sort" veldje wordt gebruikt om de positie onder een tak (= parent_id) van de boomstructuur aan te geven.
Bij het verschuiven van pagina's moeten de nummers in "sort" worden aangepast, het meest efficiënte is hier om in "sort" alleen even nummers op te nemen; het omhoog schuiven van een pagina is nu een kwestie van sort met 2 verlagen, overige verplaatsingen zijn ook kinderspel geworden; ik hoef me niet druk te maken om omliggende pagina's. Echter moeten alle sort-nummertjes nu weer herschikt worden. Momenteel kost me dat één tussentabel en twee queries maar ik wil het graag in één update-query hebben.
De volgende query lepelt de regelnummers op zoals deze in een update query...
SELECT COUNT(*)*2
FROM pages p1
, pages p2
WHERE p1.sort >= p2.sort
AND p2.parent_id = 1
GROUP BY p1.id
ORDER BY p1.sort
In normale SQL zou ik hier direct een update-query van moeten kunnen maken (eventueel als subselect) maar MySQL 3.x staat me dit niet toe, iemand tips/hints/de oplossing???
Ik weet dat mijn methode enigszins als een omweg klinkt (hoewel het vrij efficiënt is gezien het lage aantal queries dat maximaal nodig is) dus als je een betere manier weet om die sortering te regelen zónder het risico te lopen alle omliggende pagina's in een tak één voor één te moeten hernummeren dan ben ik ook geïnteresseerd.