2012-12-03 106 views
0

我也显示在我的webportal这个表,决定文章的顺序: -更新队列优先级自动

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,我有更新每个关口的位置乐躺在1和5之间,使用UPDATE查询

最后的表结构

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

(*更新位置)

此更新查询变得很耗时且低效当数据库很大,有没有其他的方式来做...

回答

2

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

+0

我不得不在不同位置移动文章不仅在顶部,可能在列表的底部,您的想法很好,但不适合这个问题,谢谢反正 – manish

2

我假设您正在寻找一种解决方案,以在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_position)

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

最终,你将需要更新所有article_position的来用尽保持一些文章之间的插入空间。但是这可以在有计划的维护间隔内完成,而不是每次article_position更改。