С моделью смежности у вас нет большого выбора, но вам нужно выбрать, а затем обновить каждого брата или сестру.
SELECT id, sortorder FROM table WHERE parentid = _MOVED ELEMENT PARENT ID_ ORDER BY sortorder DESC
Это даст вам всех братьев и сестер этого элемента. Теперь вам нужно изменить порядок массива в соответствии с вашими данными. Найдите перемещенный элемент и перейдите в иерархию массивов.
Обновите узлы, и вы закончили с сортировщиком (простого счетчика должно быть достаточно), и все готово.
Я мог бы предоставить вам некоторый псевдокод, но ASP не мой язык. Надеюсь, что идея тоже может помочь.
Обновление
PHP это так.
//search reorder element
$movedElementOldOrderIndex = $movedElementFromDb['sortorder'];
//target array
$newOrderedElements = array();
foreach($elementsFromDb as $order => $el) {
//duplicate detection
if($order == $movedElementOldOrderIndex) {
continue;
}
//reordering is here
if($movedElementNewOrderIndex == $order) {
$newOrderedElements[] = $elementsFromDb[$movedElementOldOrderIndex];
}
//push all other elements
$newOrderedElements[] = $el;
}
Это даст вам массив, где index == sortorder
, и вы можете соответствующим образом обновить записи в своей базе данных.
UPDATE
$ movdeElementFromDB - фактический элемент БД, который перемещается в запросе
$ el - один брат текущего элемента / результата запроса выше