在数据库中存储帖子显示顺序

时间:2016-04-30 15:10:46

标签: javascript php mysql laravel theory

我正在开发一个Web应用程序,它将在滑块中显示图像。重要的是我能够修改它们的显示顺序。

目前,我在图像表中有一个名为' order'的列,必须设置它以确保订单正常工作,但更改它也需要相互更改,这在处理时变得棘手有数百条记录。

这个表以及修改它的查询正在开发中,所以改变我这样做的方式完全没问题。

我的问题是:

  • 当我插入新行时,如何确保它出现在列表的末尾?如果从表中删除条目,SQL中的自动增量往往会留下空白。如何确保为行分配的订单大于表中的最高订单?

  • 如何重新排序表格?想象一下,我使用拖放界面(或类似的)来重新排序一个图像,将其带到顶部,或列表的不同部分。如果我这样做,我需要重置每个项目的编号,这在处理数百行时再次效率低下。

  • 如何在任何给定时间阻止两行具有相同的顺序?列上的UNIQUE标志?据推测,如果我设置了那个标志,那么从一行中的8改变顺序会打开另一行以使用该数字。右

感谢您抽出宝贵的时间,我希望这个问题不容易回答!

2 个答案:

答案 0 :(得分:3)

  1. 查询要插入的表格,以查找表格中的MAX ID。然后在你的插页上只需+1。

  2. 重新排序时,假设您要将图像顺序6设置为顺序3.您需要将所有行从顺序3更新为订单+ 1然后将图像设置为顺序3.

  3. UPDATE table SET id = id+1 WHERE id IN (SELECT * FROM table where id >= 3)

    1. 如果您在订单栏上使用unique来重新排序,则必须将当前值更新为临时值(例如99999),然后使用2中的方法。但是方法2应该使此表不接收任何重复值
    2. <强>旁注

      您可以删除图片重新评估ID以保持无间隙

      UPDATE table SET id = id-1 WHERE id IN (SELECT * from TABLE WHERE id > 3)

      其中3是已删除的ID

答案 1 :(得分:1)

  1. 它将在列表的末尾。只需使用auto increment功能,不要手动设置ID(例如lastID + 1),也不会描述问题。

  2. 您可以允许用户更改列表的顺序,然后只更新所有order单元格(对于列表的每个成员)。或者,每次用户拖放时,您都可以使用Ajax并为两个成员交换order值。

  3. 使用2中描述的方法之一,您将永远不会遇到此问题。