ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
##一次执行多条数据排序操作1 >序号order从1开始的递增整数,无间断无重复 为保证序号不间断、无重复,每次修改数据的序号后,都要对其他的数据序号进行顺移。 同时移动多条数据是指保证序号不间断、无重复的情况下,之后的数据移动不影响之前移动过的数据的序号。 **移动流程** ~~~ 1.把数据移动到指定位置(修改序号) 标记一个空位(数据原来的位置序号) 标记一个重复位(数据移动后的位置序号) 2.对空位和重复位排序 3.移动每对空位和重复位之间的数据 空位大于重复位:下移 空位小于重复位:上移 ~~~ * * * * * 示意图1: ![](https://box.kancloud.cn/51330064d7c6513dbaf91d9b62b7e8d9_544x407.gif) * * * * * php实例 ~~~ //要移动的数据 $rows = array( array( "id"=>3,/*唯一标识*/ "moveto"=>8/*目标位置*/ ), array( "id"=>4, "moveto"=>9 ), array( "id"=>12, "moveto"=>2 ) ... ) $kong = array();//空位 $chong = array();//重复位 $locked = array();//锁定数据 foreach($rows as $row){ $locked[] = $row[$id]; $kong[] = $o = $db->result("SELECT order FROM ".DB_TABLEPRE."user WHERE id=$row[$id] ");//数据原来的位置o $chong[] = $n = $row[moveto];//目标位置n $db->query("update user set order=$n WHERE id= ".$row[$id]);//移动该条数据 } sort($kong); sort($chong); foreach($kong as $i=>$k){ $c = $chong[$i]; if($k == $c){ //不移动 }elseif($k > $c){ //下移 $db->query("update user set order=order+1 WHERE id NOT IN(implode(',',$locked)) AND order<=$k AND order>=$c"); }else{ //上移 $db->query("update user set order=order-1 WHERE id NOT IN(implode(',',$locked)) AND order>=$k AND order<=$c"); } ~~~