我有一个需要按特定顺序显示的项目表,但该顺序可以更改。可以在开头,结尾或中间添加项目,可以重新排列项目。如何设置表格以便以易于修改的方式跟踪该顺序,但也可以通过单个查询按顺序获取列表?
例如,我可以使用“NEXT_ID”列来链接列表样式,但是如何运行SELECT查询以按NEXT_ID链的顺序获取行?
为我可能遗失的超级明显的解决方案提前道歉。
答案 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
请记住,选择长链接列表可能会降低性能。