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