如何在MySQL中通过两个参数排序分层表?

时间:2015-09-20 14:57:40

标签: mysql hierarchical-data

我有一张表中包含一些分层数据。我通过使用触发器计算路径以分层方式处理它,但现在我也想用另一个参数对它们进行排序。 看看这些图片:

这是具有按路径排序的分层数据的表:

enter image description here

我期望这两行要交换,因为行ID = 4在行ID = 2之前有一个日期:

enter image description here

那么如何按日期列排序每个级别?

注意: ID是TRIGGER生成的随机数。

2 个答案:

答案 0 :(得分:1)

您可以使用FIND_IN_SET来提取每行的层次结构级别。然后在ORDER BY子句中使用它:

SELECT ID, Name, ParentId, Date, Path
FROM mytable
ORDER BY FIND_IN_SET(ID, REPLACE(Path, '.', ',')), Date

注意:我们必须使用REPLACE函数将'.'字符替换为',' 以便FIND_IN_SET按预期工作。

Demo here

或者,您可以修改触发器,以便生成额外的'等级。字段并在查询的ORDER BY子句中使用此字段。

答案 1 :(得分:0)

我认为你必须在每个级别的路径列中添加日期,因为你不能简单地按日期排序。

所以path-column应该是这样的:

0.date-2015-12-09 22:15:12.parent1.date-2015-12-09 22:15:14.parent4

0.date-2015-12-09 22:15:12.parent1.date-2015-12-09 22:15:17.parent2

在这种情况下,日期会超过父级别。 在这种情况下,1.4将出现在1.2之前,因为1.4发生在1.2之前

路径列确实有点冗长,但它是你可以合并自己的层次结构的唯一方法,我认为

这次我得到了吗? :-) 希望我能提供帮助: - )