存储 HTML 列表的顺序而不更新数据库中的每一行?

Posted

技术标签:

【中文标题】存储 HTML 列表的顺序而不更新数据库中的每一行?【英文标题】:Store order of HTML list without updating every row in database? 【发布时间】:2009-05-28 03:08:44 【问题描述】:

我有一个可以排序的 html 列表(使用jQuery's sortable API)。我将列表项存储在数据库中;每行存储项目的顺序和文本。 如何存储列表项的顺序,以便在项的顺序更改时无需更新多行?可以添加和删除列表项。

下面是我所说的一个例子:

<ol>
  <li>Go shopping</li> <!-- Order: 1 -->
  <li>Go jogging</li> <!-- Order: 2 -->
  <li>Eat</li> <!-- Order: 3 -->
</ol>

用户将“Eat”列表项移到顶部,现在我必须更新数据库中的每一行来存储订单。

<ol>
  <li>Eat</li> <!-- Order: 3, now update to 1 -->      
  <li>Go shopping</li> <!-- Order: 1, now update to 2 -->
  <li>Go jogging</li> <!-- Order: 2 now update to 3 -->
</ol>

【问题讨论】:

/questions/547022/how-do-i-store-orders 解决了这个问题。特别是,最受好评的答案描述了一种可扩展的重新排序方案,无需更新所有内容:***.com/questions/547022/how-do-i-store-orders#547076 【参考方案1】:

有一次我必须做的是有某种“标题”记录,按顺序存储所有“项目”的 ID,用逗号分隔... 所以,在你的情况下,我会在第一个版本中存储 1,2,3,在第二个版本中存储 3,1,2。

这绝对没有标准化,感觉很丑,但是:

当用户更改订单时,您只更新 ONE 行。这很重要,我们的名单可能会变大。 当用户添加一个项目时,该项目自然会落在列表的开头或结尾,这取决于您检索要显示的项目的方式。

当您想要显示列表时,您可以读取这些项目并将它们放入一个哈希表中,按它们的 ID 排序。 然后读取设置顺序的字符串,用逗号分隔,对于每个 ID,在哈希表中找到相应的项目,并将其添加到“列表”或“集合”中。 然后,如果您的哈希表中还有项目,您可以将它们附加到列表的开头或结尾,具体取决于您希望新事物出现的位置。

只要我的 2 美分

【讨论】:

我喜欢这个主意。在本地,我想不出其他方法。您要么必须存储每个项目的位置,要么将所有项目的顺序单独存储在某个地方。

以上是关于存储 HTML 列表的顺序而不更新数据库中的每一行?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式将字符串中的值捕获到一个组中,而不考虑顺序?

为 HTML 中的每一行添加删除和更新按钮

如何在循环中更新 html 标记的值而不覆盖前几轮

处理 DB2 中存储过程或 SQL 中的每一行

SQL select:一个表中的随机顺序值用于另一个表中的每一行

对表中的每一行进行排名,并将行分组为重复项,而不重置每个组的排名