Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中创建链表或类似队列?_Mysql_Queue_Linked List - Fatal编程技术网

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

在MySQL中创建链表或类似队列?,mysql,queue,linked-list,Mysql,Queue,Linked List,我有一个需要按特定顺序显示的项目表,但该顺序可以更改。可以在开始、结束或中间添加项目,并且可以重新排列项目。如何设置表以跟踪该顺序,使其易于修改,但也可以通过单个查询按顺序获取列表 例如,我可以有一个NEXT_ID列来执行链接列表样式,但是我如何运行SELECT查询以按照NEXT_ID链的顺序获取行呢 为我可能错过的非常明显的解决方案提前道歉。我经常遇到这个问题,我用一个简单的解决方案解决了它:一个名为Sort Order或display Order的额外列,无论什么都能让你的船漂浮起来。这使我

我有一个需要按特定顺序显示的项目表,但该顺序可以更改。可以在开始、结束或中间添加项目,并且可以重新排列项目。如何设置表以跟踪该顺序,使其易于修改,但也可以通过单个查询按顺序获取列表

例如,我可以有一个NEXT_ID列来执行链接列表样式,但是我如何运行SELECT查询以按照NEXT_ID链的顺序获取行呢


为我可能错过的非常明显的解决方案提前道歉。

我经常遇到这个问题,我用一个简单的解决方案解决了它:一个名为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站点报告了一个断开的链接。我不希望从甲骨文那里得到回音。