【问题标题】:How to handle "order" of a list of items in DB (php)如何处理数据库中项目列表的“顺序”(php)
【发布时间】:2009-11-17 23:30:28
【问题描述】:

我希望我的客户能够在后端订购商品。我认为最简单的方法是让项目的数据库表有一个名为“order”的字段,该字段获取一个值。这是客户端输入的值。然后我可以运行按“order”字段排序的 SQL 查询。

现在我有它非常简单.. 没有逻辑.. 所以用户会为一个项目输入 order=100,为另一个项目输入 order=200.. 值较低的将首先列出。有没有更优雅的方式来做到这一点?我在想像“上移”和“下移”之类的东西。等等。我正在努力使管理项目更方便。

任何想法将不胜感激!

【问题讨论】:

    标签: php mysql database


    【解决方案1】:

    您的方法非常适合您尝试做的事情。对于客户端接口方面,我建议使用jQuery UI Sortable 库。可排序接口的优点在于它可以通过 AJAX 轻松链接到您的存储代码,如下所示:http://harm.glucose-ontwerp.nl/dev/sortlist.php。通过 AJAX 发送的数据是一个 ID 列表以及它们的顺序。

    【讨论】:

      【解决方案2】:

      就数据库而言,您使用订单字段的解决方案是正确的。不过,您可能不想将其暴露给用户,并且使用一对上下箭头可以绕过文本输入。当用户单击“向上”箭头时,您基本上可以将特定记录与上面的记录进行切换。在元语言中:

      // $myId holds id of record, $myOrder holds the order of the record
      
      SELECT id, order FROM t WHERE order < $myOrder LIMIT 1
      // Store id in $nextId, order in $nextOrder
      
      UPDATE t SET order = $nextOrder WHERE id = $myId
      UPDATE t SET order = $myOrder WHERE id = $nextId
      

      请注意,这只是一个非常粗略的草稿,您必须添加适当的转义。此外,如果您希望在 order 上使用 UNIQUE 索引以确保严格排序,则需要更改最后两个语句。

      【讨论】:

      • 您还必须添加一些额外的排序方法,因为在长列表中仅上下移动并不方便。
      【解决方案3】:

      您可以提供 UI 功能(即按钮和支持代码)来实现“上移”和“下移”,但是在数据库中,为了持久化用户的序列,您必须存储一个排序键已经看透了。没有其他方法可以做到这一点。如果您希望不同的用户能够以不同的方式对相同的行进行排序,那么 sortkey 必须是具有如下架构的单独“用户排序”表的一部分:

      itemKey     The primary key of the item table   
      userKey     The primary key of the userID table (or maybe just the userID)
      sortOrder   The sort key for this combination of user and product
      

      然后要确定给定用户的排序顺序,您需要将 item 表连接到 userSort 表 where userKey=[the user you're interested in]

      【讨论】:

        猜你喜欢
        • 2016-05-25
        • 2014-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 2012-08-26
        相关资源
        最近更新 更多