我有一个Web界面,列出了网格中任意数量的元素。我需要允许用户使用拖放操作对它们进行重新排序。
事情的UI方面很容易,但我很难想象在数据库上做什么 。以下是标准:
当然,我可以遍历整个表格,并自动为每个循环分配一个新的 sortOrder ,但我觉得应该有更好的优化方式
我所做的是:
这在大多数情况下工作正常,但是当我使用相同的sortOrder将元素放在两个元素之间时,它会移动到第一个元素的顶部。不介于两者之间。很明显,我必须考虑其他一些变量。但是哪个?
让我们说网格看起来像那样:
|Id|Name |sO|
|--|-----|--|
| 1|Ape | 7|
| 2|Bird |13|
| 3|Duck |13|
| 4|Gecko|13|
| 5|Fox |14|
当我拖动Ape
并将其放在Gecko
和Fox
之间时,我可以将其更新为 sortOrder 为14,然后{{1} }。
但是,当我拖动UPDATE SET sortOrder+=1 WHERE sortOrder>=14
并将其放在Ape
和Duck
答案 0 :(得分:0)
您正在处理两种排序顺序。一个是sO列中的数字。另一个是行出现时的顺序。你想维持后者,而不仅仅是前者。因此,在ID的给定sO值内跟踪顺序。如果任何下一行的sO与新行相同,那么您也会增加其order-within值。