0

我有这张表,它决定了在我的门户网站中显示的文章顺序:-

Table- ARTICLE_POSITION
`article_id` int(12) NOT NULL,

`article_position` int(11) NOT NULL

说这是表中的示例数据:-

article_id     article_position
56             1
58             2
443            3
88             4
5667           5
322            6

为了显示相关文章,我使用查询根据 article_position 对它们进行排序并显示在网页上,现在的问题是,当我尝试将任何文章移动到不同的位置时说我想将文章 5667 从位置 5 移动到位置 1,我有使用 UPDATE 查询更新介于 1 和 5 之间的每篇文章的位置

最终表结构

article_id     article_position
5667           1*
56             2*
58             3*
443            4*
88             5*  
322            6

(*位置已更新)

当数据库很大时,此更新查询变得非常耗时且效率低下,有没有其他方法可以做到......

4

2 回答 2

1

如果您想避免重新排序所有文章,请尝试为 article_position 使用除 int 之外的其他数据类型。使用时间戳之类的东西。然后您的订购查询可以按从最新时间戳到最旧的顺序显示文章。如果您需要将一篇文章移到顶部,只需为其 article_position 元素分配一个较新的时间戳。这应该可以解决必须重新排序原始示例中的所有 article_position 元素的问题。

于 2012-12-03T20:17:25.893 回答
1

我假设您正在寻找在 article_position 顺序中的任何位置插入的解决方案。我想不出一个解决方案,您永远不必为所有 article_id 更新 article_position,但您可以抵消每次 article_position 更改时都需要这样做。不是将每个 article_position 增加 1,而是通过增加的位置增量(5、10、25、100 等)为插入添加一些填充。这将为更改现有文章的 article_position 留出空间,而无需更新所有其他文章。

用您的示例进行演示:

article_id     article_position
56             5
58             10
443            15
88             20
5667           25
322            30

重新订购后(* = 更新的文章位置)

article_id     article_position
5667           2*
56             5
58             10
443            15
88             20
322            30

最终,您将需要更新所有 article_position,以防止在某些文章之间耗尽插入空间。但这可以在某个计划的维护间隔内完成,而不是在每次 article_position 更改时完成。

于 2012-12-03T21:36:32.257 回答