如何通过 MySQL 中的两个参数对分层 Table 进行排序?
How To Order A Hierarchical Table By Two Parameters In MySQL?
我有一个 table,里面有一些分层数据。我已经通过使用触发器计算路径以分层方式处理了它的排序,但现在我也想用另一个参数对它们进行排序。
看看这些图片:
这是 Table 具有按路径排序的分层数据:
我预计这两行会交换,因为第 ID = 4
行在第 ID = 2
行之前有一个日期:
那么如何按日期列对每个级别进行排序?
注意:
ID是由触发器生成的随机数。
我认为您必须在每个级别的路径列中添加日期,因为您不能简单地按日期排序。
因此路径列应该如下所示:
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 happend before 1.2
路径列确实有点冗长,但我认为这是您合并自己的层次结构的唯一方法
这次我收到了吗? :-)
希望我能帮上忙:-)
您可以使用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
按预期工作。
或者,您可以修改触发器以生成额外的 'level' 字段,并在查询的 ORDER BY
子句中使用该字段。
我有一个 table,里面有一些分层数据。我已经通过使用触发器计算路径以分层方式处理了它的排序,但现在我也想用另一个参数对它们进行排序。 看看这些图片:
这是 Table 具有按路径排序的分层数据:
我预计这两行会交换,因为第 ID = 4
行在第 ID = 2
行之前有一个日期:
那么如何按日期列对每个级别进行排序?
注意: ID是由触发器生成的随机数。
我认为您必须在每个级别的路径列中添加日期,因为您不能简单地按日期排序。
因此路径列应该如下所示:
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 happend before 1.2
路径列确实有点冗长,但我认为这是您合并自己的层次结构的唯一方法
这次我收到了吗? :-) 希望我能帮上忙:-)
您可以使用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
按预期工作。
或者,您可以修改触发器以生成额外的 'level' 字段,并在查询的 ORDER BY
子句中使用该字段。