如何处理DB(php)中项目列表的“顺序”

时间:2009-11-17 23:30:29

标签: php mysql database

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

现在我非常简单..没有逻辑..因此用户会为一个项目按顺序= 100而另一个项目的订单= 200 ...而具有较低值的那个将首先列出。有更优雅的方式吗?我想的是“向上移动”和“向下移动”。我正在尝试使管理项目更方便。

任何想法都将不胜感激!

3 个答案:

答案 0 :(得分:1)

你的方法对于你想要做的事情来说很好。对于客户端接口方面,我建议使用jQuery UI Sortable库。可排序界面的优点在于它可以通过AJAX轻松链接到您的存储代码,如下所示:http://harm.glucose-ontwerp.nl/dev/sortlist.php。通过AJAX发送的数据是ID列表及其所在的顺序。

答案 1 :(得分:0)

你可以提供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

然后,要确定给定用户的排序顺序,您可以将项目表加入userSort表where userKey=[the user you're interested in]

答案 2 :(得分:0)

就数据库而言,使用订单字段的解决方案是正确的。您可能不希望将此信息公开给用户,并且使用一对上下箭头可以避开文本输入。当用户单击“向上”箭头时,您基本上可以使用其上方的记录切换特定记录。在元语言中:

// $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

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