我有一个包含项目的表,有些是其他人的孩子(我会说很像某种论坛对话,有些是以前的孩子,有些没有孩子,有些有很多孩子,但只有一层深,没有孩子的孩子),例如我在查询一些标准后得到以下列表,按id分类:
| id | title | date | childof |
| 002 | tit2 | 2017-02-23 | 000 | if 000, not a child
| 003 | tit3 | 2017-05-12 | 000 | not a child
| 004 | tit4 | 2017-03-25 | 002 | child of 002
| 005 | tit5 | 2017-03-26 | 002 | other child of 002
| 006 | tit6 | 2017-06-13 | 000 | not a child
| 007 | tit7 | 2017-07-06 | 003 | only child of 003
我的问题是关于对结果进行排序/分组:我希望将结果列为以下内容:
| id | title | date | childof |
| 006 | tit6 | 2017-06-13 | 000 | no child most recent at first level
| 003 | tit3 | 2017-05-12 | 000 | one child
| 007 | tit7 | 2017-07-06 | 003 | only child of previous
| 002 | tit2 | 2017-02-23 | 000 | two children
| 004 | tit4 | 2017-03-25 | 002 | child #1 of 002 oldest
| 005 | tit5 | 2017-03-26 | 002 | child #2 of 002 most recent
我的出发点是:
SELECT * FROM mytable WHERE somecriteriaok ORDER BY date GROUP BY childof。
当然我尝试了更复杂的解决方案,但似乎无法达到上述结果所以我试图提出这个问题,试图让它变得简单明了...希望我成功了,并会得到一些提示,如何去(原谅我的英文......)。
皮尔。
答案 0 :(得分:0)
您是否尝试了多个订单?
ORDER BY date DESC, childof DESC
之后可能会添加GROUP BY吗?
答案 1 :(得分:0)
虽然这有点棘手,但您可以这样做,因为层次结构只有一层深度。这是一种方法,使用join
:
SELECT t.*
FROM mytable t LEFT JOIN
mytable tp -- parent
ON tp.id = t.childof
WHERE somecriteriaok
ORDER BY COALESCE(tp.date, t.date) DESC, -- newest parents first
COALESCE(tp.id, t.id), -- keep records together
(tp.id IS NULL) DESC, -- put the parent first
t.date; -- children in date order