<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ##一次執行多條數據排序操作1 >序號order從1開始的遞增整數,無間斷無重復 為保證序號不間斷、無重復,每次修改數據的序號后,都要對其他的數據序號進行順移。 同時移動多條數據是指保證序號不間斷、無重復的情況下,之后的數據移動不影響之前移動過的數據的序號。 **移動一條數據的流程** ~~~ 把數據塊從位置o移動到位置n,并添加1個鎖定塊和1個預留位(預留位=n),鎖定塊不再參與移動 如果o>n:區域上移 把m和n(包括m、n)之間的數據(排除鎖定塊)下移1位 如果o<n:區域下移 把m和n(包括m、n)之間的數據(排除鎖定塊)上移1位 ~~~ **移動多條數據的流程** ~~~ 把數據塊從位置o移動到位置n,并添加1個鎖定塊和1個預留位(預留位=n),鎖定塊不再參與移動 如果o>n:區域上移 把m和n(包括m、n)之間的數據(排除鎖定塊)下移1位 把預留位的數據下移1位,執行c次(c=預留位數量-1) 如果o<n:區域下移 把m和n(包括m、n)之間的數據(排除鎖定塊)上移1位 把預留位的數據上移1位,執行c次(c=預留位數量-1) 重復上面的步驟,直到所有數據被移動到指定的位置 ~~~ * * * * * 示意圖1: ![](https://box.kancloud.cn/70aa35958136ce04fb54e3bcbc641108_544x407.gif) * * * * * **去重說明** 每移動一次會產生一個預留位,下次區域順移的時候可能會有數據被移動到預留位,這時候需要再次移動預留位上的數據,但是如果有多條相鄰的預留位,移動后還是在預留位上,所以最多需要移動c次,c=預留位數量-1。 下面是一個php實例: ~~~ //要移動的數據 $rows = array( array( "id"=>3,/*唯一標識*/ "moveto"=>8/*目標位置*/ ), array( "id"=>4, "moveto"=>9 ), array( "id"=>12, "moveto"=>2 ) ... ) $locked = array();//鎖定塊數組 $lockedorder = array();//預留位數組 foreach($rows as $row){ $o = $db->result("SELECT order FROM ".DB_TABLEPRE."user WHERE id=$row[$id] ");//數據原來的位置o $n = $row[moveto];//目標位置n $db->query("update user set order=$n WHERE id=".$row[$id]);//移動該條數據 if($n == $o){ //不用移動 }elseif($n > $o){ //區域上移 $db->query("update user set order=order-1 WHERE id NOT IN(implode(',',$locked)) AND order>=$o AND order<=$n "); //執行c次排重 foreach($locked as $temp){ $db->query("update user set order=order-1 WHERE id NOT IN(implode(',',$locked)) AND order>=$from AND order<=$n AND order IN(implode(',',$lockedorder))"); } }else{ //區域下移 $db->query("update user set order=order+1 WHERE id NOT IN(implode(',',$locked)) AND order<=$o AND order>=$n "); //執行c次排重 foreach($locked as $temp){ $db->query("update user set order=order+1 WHERE id NOT IN(implode(',',$locked)) AND order<=$o AND order>=$n AND order IN(implode(',',$lockedorder))"); } } $locked [] = $row[$id];//添加一個鎖定數據塊 $lockedorder [] = $n;//添加一個預留位 } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看