我的网站上有一个表,用户可以重新排序行。使用jQuery UI很容易做到这一点,并且使用新订单很简单 $('#sortable').sortable("serialize") 方法。我的问题现在是,将所有这些记录保存在数据库中的最有效方法是什么,因为更改一个项目的顺序会更改表中的所有记录?我知道我可以创建一个新的 UPDATE 根据他们的ID对每行的声明,但我觉得必须有更好的方法。在那儿?

我正在使用mysql和asp.net。

有帮助吗?

解决方案

使用 START TRANSACTION 命令。这要快得多。

其他提示

鉴于可能有大量的行,我会将订购作为文本字符串条目存储在用户首选项表中(假设您有这样的表)。基本上,默认值将是一个无效的条目(以节省光盘空间),这意味着该订单与数据库中的订单没有变化,如果用户更改它,则可以序列化行的顺序(即,IE,,如果他们首先有第15行,然后是19,然后是3,您可能有 15-19-3),然后读出。这是一个更新,它无限期地缩放(嗯,直到文本字符串的长度,但这就是 漂亮的狗狗大 为了 mediumtextlongtext 类型)。


我要离开上述内容,以防万一它适用于其他人,但是对于下面描述的具体情况,我认为我会考虑将PERF存储在文本文件中。鉴于无论如何都向用户显示了订购,因此PERFS中没有安全风险,您可以很快地重写整个内容。鉴于您在下面的描述方式,我将使用两列CSV文件,但是显然您可以将其设置为最有意义。

快速搜索文件阅读速度导致 这个评论file_get_contents() 功能,这表明您可能需要注意在考虑您使用用于访问文件中数据的方法时文件的大小。我不知道写作。

您的问题至少对我来说缺乏一些清晰度。我想您显示了几个条目,我将以ID〜排名引用。例如:

5~1
6~2
7~3
1~4
24~5
2~6

现在您说“更改“一项”的顺序更改表中的所有记录”。这在您的设计中真的需要吗?如果用户使用ID-S 1和24切换元素,则您将拥有以下序列化列表:

[5~1],[6~2],[7~3],[24~5],[1~4],[2~6]

现在,通过迭代此列表,您可以轻松地确定应该真正更新哪个行(这一行不匹配自然等级顺序)。

在我的示例中,您应该进行两个更新查询,而不是六个:

update XYZ set rank=4 where id = 24;
update XYZ set rank=5 where id = 1;

干杯!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top