Изменить сортировку в базе данных, используя jstree и asp.net mvc - PullRequest
1 голос
/ 19 октября 2011

Я пытаюсь изменить сортировщик в таблице базы данных, выглядя так:

id parentid sitename sortorder
1  0        home     0 
2  0        about    1 
3  0        product  2 
4  0        contact  3

Теперь, когда я перетаскиваю «home» между «product» и «contact», используя jstree, мне нужно изменить порядок сортировки всех 4 сайтов. Когда я удаляю «домашний» сайт, я знаю, что это id, parentid и новый sortorder-index, но как будет выглядеть мое обновление linq sql, чтобы это заработало?

1 Ответ

1 голос
/ 19 октября 2011

С моделью смежности у вас нет большого выбора, но вам нужно выбрать, а затем обновить каждого брата или сестру.

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 - один брат текущего элемента / результата запроса выше

...