2017-07-05 104 views
0

我想要显示的查询按父,然后孩子排序的结果。 这里是我的代码由父母和孩子的Mysql秩序

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 

查询结果:

query result

正如你可以看到一些孩子不被父ID进行排序。我的问题是如何分类?

+0

多少深层次你找去?使用parent.category_parent!= 0意味着只有一个,但是从数据中可以看出有多个。通常你会为此使用递归,但在MySQL中你可能正在寻找这样的东西。 https://stackoverflow.com/questions/18984074/mysql-tree-ordered-by-parent-and-child – Mic

+0

@Mic但在我的表中,没有订单列,只有id和父母id .. –

+0

嗯,什么是category_group?也就是说,所显示的数据分为三个层次,如果这是最低深度,那么这一点就没有意义了。从问题中不太清楚你究竟想要做什么,这就是为什么我问你需要多少关卡。 – Mic

回答

0

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 

为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 
+0

我发现它的方式是http://sqlfiddle.com/#!2/ed673/7/0,但它没有显示第三级菜单,只是第二级的例子。 –

+0

当然,它只显示一个孩子。要显示下一个级别,您需要添加另一个连接。 –

+0

你能举一个例子代码吗? –