在MySQL中创建链表或类似队列?

时间:2010-07-22 20:17:52

标签: mysql queue linked-list

我有一个需要按特定顺序显示的项目表,但该顺序可以更改。可以在开头,结尾或中间添加项目,可以重新排列项目。如何设置表格以便以易于修改的方式跟踪该顺序,但也可以通过单个查询按顺序获取列表?

例如,我可以使用“NEXT_ID”列来链接列表样式,但是如何运行SELECT查询以按NEXT_ID链的顺序获取行?

为我可能遗失的超级明显的解决方案提前道歉。

5 个答案:

答案 0 :(得分:3)

我经常遇到这个问题,我用一个简单的解决方案解决了这个问题:一个名为Sort Order的额外列(或DisplayOrder,无论你的船真的漂浮着什么)。这使我可以灵活地使用自动生成的,自动递增的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

答案 1 :(得分:3)

在表格中创建一个表示排序顺序的列。在此列上放置一个索引,以便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;

答案 2 :(得分:2)

除非我误解你在寻找什么,否则你似乎只能添加一个DISPLAY_ORDER列,它是一个如何返回内容的数字索引。这可以很容易地改变和重新排列。加值可按顺序使用。

答案 3 :(得分:2)

最简单的解决方案:使用名为“display_order”的列,您可以在其中设置1,2,3,依此类推。查询将使用“ORDER BY display_order”进行排序。

要编辑此内容(如果您在网站相关环境中),请使用带有+和 - 按钮的javascript。每次你做+数字增量,如果有数字的东西存在,它会减少,所以他们切换位置。

答案 4 :(得分:1)

如果要避免排序顺序,可以尝试“父”列,并将链表视为树状结构的特殊情况。这篇文章可能有所帮助。

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/(断链接。向甲骨文报告......抱歉)。

还有其他文章: http://ferdychristant.com/blog//archive/DOMM-7QJPM7

请记住,选择长链接列表可能会降低性能。