正在数据库中存储 post 显示顺序
Storing post display order in database
我正在开发一个 Web 应用程序,它将在滑块中显示图像。重要的是我能够修改它们的显示顺序。
目前,我在图像的 table 中有一列名为 'order',必须对其进行设置以确保排序正确,但更改它也需要每隔一个更改,这就变成了处理数百条记录时很棘手。
此 table 以及修改它的查询正在开发中,因此完全可以改变我执行此操作的方式。
我的问题是:
插入新行时,如何确保它出现在列表末尾?如果您从 table 中删除条目,SQL 中的自动递增往往会留下空白。如何确保为该行分配的顺序比 table 中的最高顺序大 1?
如何重新订购 table?想象一下,我使用拖放界面(或类似界面)对一张图像重新排序,将其置于顶部或列表的不同部分。如果我这样做,我需要重置每个项目的编号,这在处理数百行时同样效率低下。
如何防止两行在任何给定时间具有相同的顺序?列上的 UNIQUE 标志?大概如果我设置了那个标志,改变顺序,比如说,一行 8 会打开另一个使用那个数字。对吗?
感谢您抽出宝贵的时间,我希望这个问题不会太模糊而不易回答!
它将在列表的末尾。只需使用 auto increment
功能,不要手动设置 ID(如 lastID + 1
),您将永远不会遇到描述的问题。
您可以允许用户更改列表的顺序,然后只更新所有 order
单元格(对于列表的每个成员)。或者您可以使用 Ajax 并在每次用户拖放时为两个成员交换 order
值。
使用 2 中描述的方法之一,您将永远不会遇到此问题。
查询您要插入的 table 以查找 table 中的 MAX id。然后在您的插入中执行此 +1.
重新排序时,假设您要将图像顺序 6 设置为顺序 3。您将要更新从顺序 3 开始的所有行到顺序 +1,然后将图像设置为顺序 3 .
UPDATE table SET id = id+1 WHERE id IN (SELECT * FROM table where id >= 3)
- 如果您在订单列上使用 unique 重新排序,则必须将当前值更新为临时值,例如 99999,然后使用方法 2。但是方法 2 应保留此 table 从接收任何重复的值。
旁注
您可以在删除图片时重新评估 id 以保持无间隙
UPDATE table SET id = id-1 WHERE id IN (SELECT * from TABLE WHERE id > 3)
其中3是删除的id
我正在开发一个 Web 应用程序,它将在滑块中显示图像。重要的是我能够修改它们的显示顺序。
目前,我在图像的 table 中有一列名为 'order',必须对其进行设置以确保排序正确,但更改它也需要每隔一个更改,这就变成了处理数百条记录时很棘手。
此 table 以及修改它的查询正在开发中,因此完全可以改变我执行此操作的方式。
我的问题是:
插入新行时,如何确保它出现在列表末尾?如果您从 table 中删除条目,SQL 中的自动递增往往会留下空白。如何确保为该行分配的顺序比 table 中的最高顺序大 1?
如何重新订购 table?想象一下,我使用拖放界面(或类似界面)对一张图像重新排序,将其置于顶部或列表的不同部分。如果我这样做,我需要重置每个项目的编号,这在处理数百行时同样效率低下。
如何防止两行在任何给定时间具有相同的顺序?列上的 UNIQUE 标志?大概如果我设置了那个标志,改变顺序,比如说,一行 8 会打开另一个使用那个数字。对吗?
感谢您抽出宝贵的时间,我希望这个问题不会太模糊而不易回答!
它将在列表的末尾。只需使用
auto increment
功能,不要手动设置 ID(如lastID + 1
),您将永远不会遇到描述的问题。您可以允许用户更改列表的顺序,然后只更新所有
order
单元格(对于列表的每个成员)。或者您可以使用 Ajax 并在每次用户拖放时为两个成员交换order
值。使用 2 中描述的方法之一,您将永远不会遇到此问题。
查询您要插入的 table 以查找 table 中的 MAX id。然后在您的插入中执行此 +1.
重新排序时,假设您要将图像顺序 6 设置为顺序 3。您将要更新从顺序 3 开始的所有行到顺序 +1,然后将图像设置为顺序 3 .
UPDATE table SET id = id+1 WHERE id IN (SELECT * FROM table where id >= 3)
- 如果您在订单列上使用 unique 重新排序,则必须将当前值更新为临时值,例如 99999,然后使用方法 2。但是方法 2 应保留此 table 从接收任何重复的值。
旁注
您可以在删除图片时重新评估 id 以保持无间隙
UPDATE table SET id = id-1 WHERE id IN (SELECT * from TABLE WHERE id > 3)
其中3是删除的id