我正在尝试更改数据库表中的排序顺序,如下所示:
id parentid sitename sortorder
1 0 home 0
2 0 about 1
3 0 product 2
4 0 contact 3
现在,当我使用jstree在“产品”和“联系人”之间拖动“home”时,我需要更改所有4个站点的排序顺序。当我放弃“home”站点时,我知道的是id,parentid和新的sortorder-index,但是我的更新linq sql将如何使其工作?
答案 0 :(得分:1)
使用Adjacency-Model,您没有太多选择,但需要选择并更新每个兄弟。
SELECT id, sortorder FROM table WHERE parentid = _MOVED ELEMENT PARENT ID_ ORDER BY sortorder DESC
这将为您提供此元素的所有sibbling。现在,您需要根据输入重新排序结果数组。搜索移动的元素并在数组层次结构中移动。
更新节点,你完成了一个排序顺序(一个简单的计数器就足够了),你就完成了。
我可以为你提供一些伪代码,但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
,您可以相应地更新数据库记录。
<强>更新强>
$ movdeElementFromDB - 在请求中移动的实际db元素
$ el - 是上面查询的当前元素/结果的一个兄弟