在加入mysql时按父子关系排序

时间:2018-11-04 17:06:03

标签: mysql

我有两个具有此类结构的类别表

category:- Id Name
category_detail: category_Id parent_Id

日期是这样的 类别

1  Laptop  
2  Mobile
3  HP
4  LG
5  Nokia
6  Sony
7  DELL
category_det
1  0
2  0
3  1
4  2
5  2
6  2
7  1

I want result like this
1 Laptop
3 HP
7 DELL
2 Mobile
4 LG
5 Nokia
6 Sony

    SELECT `Id`,`Name` FROM `category` 
    INNER JOIN category_det ON category_det.category_Id = category.Id
 COALESCE(category_det.parent_Id, category.Id),  cateory.Id

,但未按要求返回。 谢谢

1 个答案:

答案 0 :(得分:0)

此处的技巧是确定自定义排序参数。如果parent_id的值为0,我们可以简单地使用category_id的值进行排序;否则为parent_id值。这是因为其他级别的parent_id值与父级别的category_id相同。

我们还将使用多级Order By,第二级排序使用category_id

您可以执行以下操作:

SELECT 
  cd.category_id, 
  c.name 
FROM 
  category AS c 
JOIN category_detail AS cd ON c.id = cd.category_id  
ORDER BY 
  CASE WHEN cd.parent_id = 0 THEN cd.category_id 
       ELSE cd.parent_id 
  END
  , cd.category_id