【问题标题】:How can I change the display order?如何更改显示顺序?
【发布时间】:2015-02-23 15:53:47
【问题描述】:

我有一个表单,用户可以在这个表单上更改显示顺序。这反映在显示我们所有员工的页面上,我们希望能够控制他们出现的顺序。

提交表单后,我想更改数据库中的其他显示顺序以反映更改。

一些示例数据:

当他们保存该表单时,除了显示顺序之外,所有内容都会更新到数据库。这是在单独的函数调用中处理的。

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);
    }
  }

}

现在发生了什么:

【问题讨论】:

  • 现在会发生什么? :)

标签: php mysql drupal-6


【解决方案1】:

从当前位置移除您的项目

 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);

【讨论】:

  • 这个答案有用吗?
【解决方案2】:

如果插入新员工:

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 是当前修改员工的值

【讨论】:

  • 我认为你在所有情况下都错了,除了员工订单 2 变成订单 1
猜你喜欢
  • 2010-09-08
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 2020-12-29
  • 2013-09-13
相关资源
最近更新 更多