php - 使用 PHP 在 MySQL 中完全任意排序

标签 php mysql database sorting relational

我在 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 的行集,自定义顺序是唯一的。

我一直在寻找提供这种排序的方法,但没有成功。我想了几种方法来实现这一点,但请帮我填写最终选项:

  1. 添加一个 INT 列并将其值设置为我需要获取行的值 按我的订单返回。这就出现了扫描的问题 逐行查找插入点,并且可能需要 更新前/后行排序列。
  2. 有一个“下一个”和“上一个”列,实现一个链接列表。 一旦找到我的位置,我只需更新最多 2 行即可插入 行。但这需要扫描第 1 行的位置。
  3. 一些我不知道的 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/

相关文章:

mysql - 无法 rake 分贝 :create:all -- Couldn't create database for {"encoding"= >"utf8", "username"= >"root", "adapter"= >"mysql"

mysql 5.7 json_extract 带有产品表中所有结果的键

mysql - 为什么Mysql的索引需要一个名字?

mysql - cakePHP自动从mysql中删除数据

php - 在 PHP 中登录 Javascript

php - 从表中删除项目 - Laravel

mysql auto_increment 5?

在类变量中使用 DIRECTORY_SEPARATOR 的 PHP 解析错误

php - 获取为每个选项创建的 Select 标签,而不是为所有选项创建一个标签

MongoDB 集合与新数据库