MySQL查询:在父母之后命令孩子

时间:2011-09-01 18:57:01

标签: mysql

我有一张桌子:

enter image description here

我可以使用单个查询对其进行组织以显示:

enter image description here

谢谢。

1 个答案:

答案 0 :(得分:1)

是的,你可以做这个混蛋:

ORDER BY CASE parentid WHEN 0 THEN id ELSE parentid END ASC, id ASC

我说这是一种混蛋,因为它需要对每一行进行计算。它不会是高效的。解决此问题的更好方法是使用更好的数据模型。您也可以使用Nested Set Model进行存储,而不是仅存储父ID。所以基本上你的数据模型看起来像:

id | parentid | name   | left | right
1  | 0        | Peter  | 1    | 4
2  | 0        | Marcus | 5    | 8
3  | 1        | Monica | 2    | 3 
4  | 2        | Sergei | 6    | 7

现在,通过它,您的订单将减少到:

ORDER BY `left` ASC

哪个会做同样的事情。给嵌套的集文章一个读。如果您需要过滤或排序数据,有更好的方法来解决问题,而不仅仅是parentid ...