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

时间:2009-05-28 03:08:45

标签: javascript sql html

我有一个可以排序的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>

1 个答案:

答案 0 :(得分:2)

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

这绝对没有正常化,感觉很难看,但是:

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

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

只需2美分