我有一张表中包含一些分层数据。我通过使用触发器计算路径以分层方式处理它,但现在我也想用另一个参数对它们进行排序。 看看这些图片:
这是具有按路径排序的分层数据的表:
我期望这两行要交换,因为行ID = 4
在行ID = 2
之前有一个日期:
那么如何按日期列排序每个级别?
注意: ID是TRIGGER生成的随机数。
答案 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
按预期工作。
或者,您可以修改触发器,以便生成额外的'等级。字段并在查询的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之前
路径列确实有点冗长,但它是你可以合并自己的层次结构的唯一方法,我认为
这次我得到了吗? :-) 希望我能提供帮助: - )