从代码的角度来看,最简单的方法是使用链表样式,其中您有一个下一个元素 id,而不是一个订单值。这在小型列表中不太有用,但是当您开始增加列表大小时,它会使更新/移动/删除更加干净,并防止可能更新数千个元组以进行 1 个订单更改。
++ 我手头没有确切的代码示例,但您可以调用用户的所有列表
SELECT Posts.id, Posts.next, Posts.content, User.firstPost FROM db.posts AS Posts
JOIN db.user as User ON Posts.ownerid = User.id
WHERE User.id='123' AND Posts.active = 1;
这将获取单个用户的所有帖子,然后您将拥有一个包含下一个帖子 id 的字段。首先,您需要一个密钥来识别第一篇文章(将第一篇文章的 id 存储在用户信息中)。拉出第一个帖子后,您获取它的“下一个”值,并使用它来识别下一个帖子。
对于一个简短的列表来说,这似乎有点疯狂,但想想一个有 1000 个帖子的用户。如果他们需要在第二个位置添加 1 个帖子。在传统的数字排序系统中,您现在需要使用 +1 更新来更新 999 行。使用此解决方案,如果您需要在第二个位置插入帖子,您只需查询第一个帖子以获取它的下一个值。获得后,将其更改为新的第二个帖子的值,并将第二个帖子的下一个值设置为第一个帖子最初持有的值。
[1st Post] --Next---> [2nd Post] --Next---> [3rd Post]
插入后:
[1st Post] -. .--> [2nd Post] --Next---> [3rd Post]
`--Next--> [New 2nd Post]--`