按用户手动输入的号码订购帖子

时间:2015-03-07 11:22:17

标签: algorithm sorting

我有一个网站,其管理员用户登录到限制区域并添加显示在公共区域的内容。管理员想要在插入/编辑表单上输入一个简单的输入文本字段,他可以在其中键入一个数字,用于确定该帖子将向公众显示的位置。

因此,如果“Foo”帖子的编号为3,则应列在第3位,旧帖子3应为4,4应为5,依此类推。如果将帖子5重新定位为1,则1应自动变为2,2,应该变为3,等等。如果管理员重新定位,则3到2,2应该变为3,而不需要更改其他的。如果10变为9,9则变为10并且不需要更改其他帖子'位置要么。简而言之,当一个帖子的位置发生变化(或插入现有帖子的中间位置)时,其余的帖子应该相应地改变其位置。

我考虑了两种可能性:

  • 创建一个疯狂的算法,选择所需的每个帖子并更新position列;
  • 在表格中实现链接列表,以便每个帖子始终知道下一个帖子的主键是什么。

使用第一个选项,当管理员插入或更新帖子的位置时,所有工作都在那时完成,当访问公共站点时,SQL只选择所有需要的帖子按position查询和排序。我真的不知道如何实现它,但我确信使用了大量的代码,可能还有不好的权衡。

使用第二个选项,在插入/更新期间完成的工作少得多,但是当用户访问网站时,我需要为每个帖子做一个选择,以便使用每个帖子实现正确的定位&#39 ; s链接到下一个“节点”。所以,如果我在给定类别中有150个帖子,我必须运行150个选项(当前"节点"指向每个帖子一个;在此不使用分页案例,只有标题会真正列出,一个在另一个之下,所以,我会真正列出所有标题。

我想就我所描述的两种可能性的其他方法,见解或改进提出建议。

我接受@FractlizeR答案,因为它使用其他一些已建立的软件来支持他的选择。

wrote a small prototype on the solution I ended up using at work。当然,我在工作中使用的代码是不同的,因为我正在改变遗留系统。尽管如此,我使用了与原型中完全相同的SQL方法。我希望我能尽快改进原型,特别是它的评论,但至少我会或其他人需要做类似的事情。

1 个答案:

答案 0 :(得分:1)

我会投票给#1。例如,XenForo论坛引擎就是这样。它使用帖子position进行分页和其他事情。当需要在一个帖子中插入一个新帖子时,它会查询所有帖子的帖子,需要重新排序,然后为每个帖子计算一个新位置,然后更新所有帖子的表格,这个位置发生了变化。

我们在生产中长时间使用XenForo,实际上应该没有问题,因为这个操作(重新排序)并不复杂。

相关问题