在MySQL中创建链表或类似队列?
我有一个需要按特定顺序显示的项目表,但该顺序可以更改。可以在开始、结束或中间添加项目,并且可以重新排列项目。如何设置表以跟踪该顺序,使其易于修改,但也可以通过单个查询按顺序获取列表 例如,我可以有一个NEXT_ID列来执行链接列表样式,但是我如何运行SELECT查询以按照NEXT_ID链的顺序获取行呢在MySQL中创建链表或类似队列?,mysql,queue,linked-list,Mysql,Queue,Linked List,我有一个需要按特定顺序显示的项目表,但该顺序可以更改。可以在开始、结束或中间添加项目,并且可以重新排列项目。如何设置表以跟踪该顺序,使其易于修改,但也可以通过单个查询按顺序获取列表 例如,我可以有一个NEXT_ID列来执行链接列表样式,但是我如何运行SELECT查询以按照NEXT_ID链的顺序获取行呢 为我可能错过的非常明显的解决方案提前道歉。我经常遇到这个问题,我用一个简单的解决方案解决了它:一个名为Sort Order或display Order的额外列,无论什么都能让你的船漂浮起来。这使我
为我可能错过的非常明显的解决方案提前道歉。我经常遇到这个问题,我用一个简单的解决方案解决了它:一个名为Sort Order或display Order的额外列,无论什么都能让你的船漂浮起来。这使我能够灵活地使用自动生成、自动递增的ID列,并具有特殊的预定义排序 在我的例子中,我需要它们以字母顺序从数据库中出来,除了像其他和N/A这样的项目总是最后一个
ProdID ProdText SortOrder
2 "Anchovies" 1
3 "Rivet" 2
4 "N/A" 4
5 "Other" 3
SELECT ProdID, ProdText ORDER BY Sort Order
除非我误解了你要找的是什么,否则你似乎可以添加一个显示顺序列,它是一个数字索引,指示如何返回物品。这很容易改变和重新安排。加号值可按顺序使用。在表中创建一列,表示排序顺序。在此列上放置索引,以便MySQL引擎可以基于此列快速检索。更改顺序时,请更新此字段中所有记录的值以保持一致 例如,在中间插入新记录时: UPDATE table SET sort_order = sort_order + 1 WHERE sort_order >= 5; INSERT INTO table (sort_order, column1, column2) VALUES (5, 'value1', 'value2'); 更复杂的事情,比如将3向下移动到6,然后将所有其他的向上滑动: UPDATE table SET sort_order = Case sort_order When 3 Then 6 Else sort_order - 1 End WHERE sort_order BETWEEN 3 AND 6;
最简单的解决方案:使用名为display_order的列,在其中设置1、2、3,依此类推。查询将按显示顺序进行排序
如果您处于与网站相关的环境中,则可以使用javascript,例如+和-按钮。每次你做+数递增,如果有数字的存在,它会减少,所以他们切换位置。 < P>如果你想避免排序顺序,你可以尝试一个父列,并考虑链表是一个树形结构的特殊情况。这篇文章可能会有所帮助 还有其他文章:
请记住,选择一个长链表可能会降低性能。好吧,我希望我不必为一次移动或插入更新所有/多个记录。但是根据下面的答案,MySQL中可能不存在这种功能。@NChase:我还没有在SQLI中找到这种功能。我希望我只需要更新正在移动/插入的记录,而不是通过整个排序器级联更改,但这听起来可能不可能,也不一定是全部。它只影响正在更改的范围之间的记录。例如,如果将索引为3的记录下移到7,则只会更新介于3和7之间的记录。不需要更改任何其他内容。请参阅。如前所述,这是树的一个特例。没有办法编写一个获取所有行的MySQL查询。感谢您指出这一点。我通过mysql站点报告了一个断开的链接。我不希望从甲骨文那里得到回音。