gpt4 book ai didi

javascript - 在 JavaScript 和 MySQL 中存储列表排序顺序的替代方法

转载 作者:可可西里 更新时间:2023-11-01 07:07:59 25 4
gpt4 key购买 nike

我有一个使用 JavaScript 和 jQuery Sortable 库的项目任务列表,可以轻松地对任务列表项进行拖放排序。

当排序顺序发生变化时,该顺序将保存到 MySQL 数据库中。目前,如果有 100 个任务列表项目,项目编号 2 移动到位置 3。这将使记录 2-100 在数据库中全部更新,任务记录数据库表上有一个 sort_order 列。

这显然不是最有效的解决方案,因为它会导致同时更新大量数据库记录。

另一个问题是,这会导致我的任务记录中的 date_modified 列全部更新,而任务中除了排序顺序号之外没有任何更改,这可能是由其他记录移动位置引起的.显然有很多解决方法,我目前已经编写了一个巨大的复杂 SQL 查询,确保不会更新我的 date_modified 列,除非表中的其他列被修改。

所以这篇文章的目的是探索其他替代方法来存储我在大量记录上的排序顺序。

我的一个想法是创建新的数据库表 task_sort_order,它可以包含列 task_idsort_order。然后,该表将为每个任务记录保存一条记录。这种方法的好处是我的 SQL 将得到简化,因为我不必担心在仅排序顺序发生变化时更新任务记录日期字段。然而,它仍然需要一次更新相同数量的记录。在我原来的例子中,它仍然会在 1 次查询中批量更新 100 条记录中的 99 条记录。不过,它似乎确实比我现在的有好处。

是否有任何其他方法可以改进将大量排序顺序存储到数据库中?

我见过有些人还会以 10 或其他数字为增量保存每个排序顺序号,例如,如果有 5 条记录 1=10, 2=20, 3=30, 4=40 , 5=50 并且记录号 2 移动到位置 4。它将有一个新的排序顺序 1=10, 3=30, 4=40, 2=44, 5=50 因此在本例中,只有第 2 条记录的 sort_order 值会更改并保存到数据库中。

这看起来相当复杂,因为许多记录开始四处移动,最终得到各种奇怪的奇数,而且它还必须以某种方式计算正确的数字以确保新移动的项目与之前移动的项目不冲突项目。

正如您所见,我乐于听取任何关于其他方法的想法,甚至是改进我当前方法的方法?

最佳答案

我认为你的问题在于你如何在数据库中存储订单的缺点。两个想法:

  1. 您可以尝试在您的关系数据库架构中实现链表的概念,即,您为每个项目存储对下一个项目的“引用”。通过这种方式,您只需在每次重新排列时更新几条记录。

  2. 您可以使用 Neo4j 或 OrientDB 等图数据库,其中链表只是数据库 native 支持的可能数据输入链接之一。

关于javascript - 在 JavaScript 和 MySQL 中存储列表排序顺序的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33317721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com