我在 MySQL 中有一个表,可以从 PHP 访问它。例如,我们有一个名为 THINGS 的表:
things.ID - int primary key
things.name - varchar
things.owner_ID - int for joining with another table
获取我需要的内容的选择语句可能如下所示:
SELECT * FROM things WHERE owner_ID = 99;
非常简单。现在,我希望用户能够为此查询返回的项目指定完全任意的顺序。将显示列表,然后他们可以单击行旁边的“向上”或“向下”按钮并将其在列表中向上或向下移动,或者可能通过拖放操作将其移动到其他任何位置。我希望将此订单保存在数据库中(相同或其他表)。对于每个owner_ID 的行集,自定义顺序是唯一的。
我一直在寻找提供这种排序的方法,但没有成功。我想了几种方法来实现这一点,但请帮我填写最终选项:
- 添加一个 INT 列并将其值设置为我需要获取行的值 按我的订单返回。这就出现了扫描的问题 逐行查找插入点,并且可能需要 更新前/后行排序列。
- 有一个“下一个”和“上一个”列,实现一个链接列表。 一旦找到我的位置,我只需更新最多 2 行即可插入 行。但这需要扫描第 1 行的位置。
- 一些我不知道的 SQL/关系数据库技巧...
我正在寻找问题 3 的答案,因为它可能就在那里,谁知道呢。另外,我想在数据库上卸载尽可能多的负载。
最佳答案
根据我的阅读,您需要一个包含每个用户的排序的新表,假设它名为 *user_orderings*。
该表应包含用户 ID、事物的位置和事物的 ID。 (user_id, thing_id) 应该是 PK。这样,您每次都需要更新此表,但您可以按照用户想要的顺序获取用户的事物,在 user_orderings 表上使用 ORDER BY 并将其与事物表连接起来。它应该可以工作。
关于php - 使用 PHP 在 MySQL 中完全任意排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9526562/