Php MySQL中更新orderning的最快方法

Php MySQL中更新orderning的最快方法,php,html,mysql,sorting,Php,Html,Mysql,Sorting,假设我有一个从数据库生成的项目列表。在本例中,我们称之为: item1 item2 item3 ... itemN 假设我想允许某人拖动这些项目中的任何一个,并按他们想要的顺序放置它们,即他们可以获取项目10并将其放置在项目2和项目3之间,以便它现在显示在项目2之后 这意味着我需要更新所有项目的顺序,这些项目位于拖动项目的放置位置之后。最有效的方法是什么?是有什么把戏,还是我只是更新了之后的一切 编辑: 节点方法会更快吗?\n按节点,我的意思是每个项目都链接到下一个项目。这样,您只需要更新三个

假设我有一个从数据库生成的项目列表。在本例中,我们称之为:

item1
item2
item3
...
itemN
假设我想允许某人拖动这些项目中的任何一个,并按他们想要的顺序放置它们,即他们可以获取项目10并将其放置在项目2和项目3之间,以便它现在显示在项目2之后

这意味着我需要更新所有项目的顺序,这些项目位于拖动项目的放置位置之后。最有效的方法是什么?是有什么把戏,还是我只是更新了之后的一切

编辑:

节点方法会更快吗?\n按节点,我的意思是每个项目都链接到下一个项目。这样,您只需要更新三个节点的子节点,其他所有操作都将正常工作。在我上面的例子中,在拖动之前,我有:

item2.child=item3,itemN-1.child=itemN,itemN.child=null

拖动后,我需要更新:

item2.child=itemN,itemN.child=item3,itemN-1.child=null


这是一个更好的实现吗?这样做,我想不出一种方法来正确显示数据库中的查询列表…

如果您在这里谈论的是UI方式:

假设我们有5个元素名,每个元素都有一个名为order的属性

<ob1 order="1" name="1">
<ob1 order="2" name="2">
<ob1 order="3" name="3">
<ob1 order="4" name="4">
<ob1 order="5" name="5">
<ob1 order="1" name="1">
<ob1 order="2" name="2">
<ob1 order="3" name="3">
<ob1 order="4" name="4">
<ob1 order="5" name="5">
假设我们想把名为5的放在第一位

它变成:

<ob1 order="1" name="5">
<ob1 order="2" name="1">
<ob1 order="3" name="2">
<ob1 order="4" name="3">
<ob1 order="5" name="4">
<ob1 order="0" name="5">
<ob1 order="1" name="1">
<ob1 order="2" name="2">
<ob1 order="3" name="3">
<ob1 order="4" name="4">
当您将name=5拖动到顶部时,顺序设置为1,然后将其余的1添加到它们中

或者:

假设我们有5个元素名,每个元素都有一个名为order的属性

<ob1 order="1" name="1">
<ob1 order="2" name="2">
<ob1 order="3" name="3">
<ob1 order="4" name="4">
<ob1 order="5" name="5">
<ob1 order="1" name="1">
<ob1 order="2" name="2">
<ob1 order="3" name="3">
<ob1 order="4" name="4">
<ob1 order="5" name="5">
当您将name=5移到顶部时,它将获得下一个元素的排序顺序,然后从中减去1,因此:

它变成:

<ob1 order="1" name="5">
<ob1 order="2" name="1">
<ob1 order="3" name="2">
<ob1 order="4" name="3">
<ob1 order="5" name="4">
<ob1 order="0" name="5">
<ob1 order="1" name="1">
<ob1 order="2" name="2">
<ob1 order="3" name="3">
<ob1 order="4" name="4">
再次应用相同类型可以将4移到顶部:

<ob1 order="-1" name="4">
<ob1 order="0" name="5">
<ob1 order="1" name="1">
<ob1 order="2" name="2">
<ob1 order="3" name="3">
对不起,有一堆文字


在数据库中移动它们的最快方法是:没有。处理代码中的排序,然后将排序应用于数据库。

因为您对实际逻辑感兴趣,所以我几个月前就实现了这个想法:

对于UI,尽可能长时间地延迟任何服务器端请求 发送订购请求时,将数据格式化为id=>order。最理想的方法。 激活交易 获取可能由id字段索引的所有数据 根据POST和fetch数据计算增量,即哪些内容已更改,哪些内容未更改。这可以大大减少要运行的查询数量。 根据需要运行尽可能多的更新查询 提交事务。
结论:我想不出一个最佳的方法来做这件事,主要是因为SQL的更新查询的性质

我只是更新每一行,即使只有两个交换的位置,但我也不知道这一点。似乎额外的努力来最小化服务器端代码中的更新是不值得的,但也许还有另一种方法。你在使用什么语言?我在Laravel框架中使用PHP。但正如你所说,我更感兴趣的是逻辑,而不是实际的代码实现。有关于这方面的完整教程,例如,不,不,我是说数据库更新,而不是UI视图这些“项目”是什么,它们的顺序代表什么?需要订购吗?相对简单的date rodering就足够了吗?谢谢你提供的信息,但我要说的更多的是数据库更新,而不是UI。这也是最后一部分。