简体   繁体   English

父子级的MySQL顺序

[英]Mysql order by parent and child

I want to display a result of query sorted by parent and then the child. 我想显示按父级然后按子级排序的查询结果。 Here's my code 这是我的代码

SELECT * FROM 
mst_category AS parent 
LEFT JOIN mst_category AS child 
ON child.category_parent = parent.category_id
GROUP BY parent.category_id
ORDER BY parent.category_group, COALESCE(parent.category_parent, parent.category_id), parent.category_parent != 0, child.category_id

The result of the query : 查询结果:

查询结果

As you can see some of the children are not sorted by parent id. 如您所见,某些子项未按父ID排序。 My question is how to sort it ? 我的问题是如何排序?

Simplify your order by clause to just what you want the sort order to be: 将您的order by子句简化为您想要的排序顺序:

SELECT 
    parent.category_id as `parent_id`,
    parent.category_group as `parent_group`,
    child.category_id as `child_id`
    child.category_group as `child_group`
FROM mst_category AS parent 
LEFT JOIN mst_category AS child 
    ON child.category_parent = parent.category_id
GROUP BY parent.category_id
ORDER BY parent.category_group, child.category_group

For 3 levels: 对于3个级别:

SELECT 
    parent.category_id as `parent_id`,
    parent.category_group as `parent_group`,
    child.category_id as `child_id`
    child.category_group as `child_group`,
    child2.category_id as `child2_id`
    child2.category_group as `child2_group`
FROM mst_category AS parent 
LEFT JOIN mst_category AS child 
    ON child.category_parent = parent.category_id
LEFT JOIN mst_category AS child2
    ON child2.category_parent = child.category_id
WHERE parent.category_id = 0
GROUP BY parent.category_id, child.category_id, child2_category_id
ORDER BY parent.category_group, child.category_group, child2.category_group

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM