2015-02-23 50 views
0

我有一個表格,在這個表格上,用戶可以改變顯示順序。這反映在顯示我們所有員工的頁面上,我們希望能夠控制他們出現的順序。如何更改顯示順序?

enter image description here

當表單提交,我想修改數據庫中的其他顯示訂單以反映更改。

一些示例數據:

enter image description here

當他們保存形式,一切都被更新爲除顯示順序的分貝。這是在一個單獨的函數調用中處理的。

function updateDisplayOrder($eid, $display_order_old, $display_order) 
{ 
    if ($eid > 0) 
    { 
    if ($display_order != $display_order_old) 
    { 
     $result = db_query("SELECT * FROM {help_employees} WHERE active = 1 ORDER BY display_order"); 
     while ($arr = db_fetch_array($result)) 
     { 
     if ($display_order > $display_order_old) 
     { 
      if ($arr["display_order"] > $display_order_old && $arr["display_order"] <= $display_order) 
      { 
      db_query("UPDATE {help_employees} SET display_order = %d WHERE eid = %d", array($arr["display_order"] - 1, $arr["eid"])); 
      } 
     } 
     else 
     { 
      if ($arr["display_order"] < $display_order_old && $arr["display_order"] >= $display_order) 
      { 
      db_query("UPDATE {help_employees} SET display_order = %d WHERE eid = %d", array($arr["display_order"] + 1, $arr["eid"])); 
      } 
     } 
     } 
     db_query("UPDATE {help_employees} SET display_order = %d WHERE eid = %d", $display_order, $eid); 
    } 
    } 

} 

現在會發生什麼:

+2

發生了什麼現在呢? :) – 2015-02-23 15:56:55

回答

0

如果插入一個新員工:

db_query("UPDATE {help_employees} SET display_order = display_order + 1 WHERE display_order >= :display_order", $display_order); 

否則,如果$ display_order> $ display_order_old

db_query("UPDATE {help_employees} SET display_order = display_order + 1 WHERE display_order >= :display_order AND id <> :id", $display_order, $id)`; 

否則

db_query("UPDATE {help_employees} SET display_order = display_order + 1 WHERE display_order >= :display_order AND display_order < :display_order_old AND id <> :id", $display_order, $display_order_old, $id); 

其中$ display_order_old,$ display_order並且$ id是當前修改的員工的價值觀

+0

我認爲你在所有情況下都是錯誤的,除了員工訂單2成爲訂單1 – 2015-02-23 16:17:13

+0

我不好,你說得對。我將修改我的答案 – 2015-02-23 16:19:02

0

從當前位置刪除您的項目

db_query("UPDATE {help_employees} 
    SET display_order = display_order - 1 
    WHERE eid != %d AND active = 1 AND display_order > %d", 
     $eid, $display_order_old); 

添加一些空間,它的新位置

db_query("UPDATE {help_employees} 
    SET display_order = display_order + 1 
    WHERE eid != %d AND active = 1 AND display_order >= %d", 
     $eid, $display_order); 

修改它:

db_query("UPDATE {help_employees} SET display_order = %d WHERE eid = %d ", 
     $display_order, $eid); 
+0

此解答是否有用? – Adam 2015-03-16 10:09:37