Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按查询顺序发出_Mysql_Sql - Fatal编程技术网

Mysql 按查询顺序发出

Mysql 按查询顺序发出,mysql,sql,Mysql,Sql,我有以下表格:- id name parent_id 1 ABC 0 2 XYZ 0 3 BB 1 4 AA 1 5 PQR 0 我想要的是这样的order by查询,它显示这样的结果 1 ABC 0 4 AA 1 3 BB 1 5 PQR 0 2 XYZ 0 i、 按升序排列父项目和子项目,父项目名称后跟子项目 我使用这样的查询,但是当我们使用按级别排序时(没有升序),ok,但我想要带名称的订单级别 SELECT distinct `pp08

我有以下表格:-

id name parent_id
1  ABC  0
2  XYZ  0
3  BB   1
4  AA   1
5  PQR  0
我想要的是这样的order by查询,它显示这样的结果

1  ABC  0
4  AA   1
3  BB   1
5  PQR  0
2  XYZ  0
i、 按升序排列父项目和子项目,父项目名称后跟子项目

我使用这样的查询,但是当我们使用按级别排序时(没有升序),ok,但我想要带名称的订单级别

SELECT distinct `pp088_projects`.* , ( 
    SELECT LPAD(parent.id, 5, '0')
      FROM `pp088_projects` parent
      WHERE parent.id = `pp088_projects`.id 
      AND parent.parent_id = 0 
    UNION 
    SELECT CONCAT(LPAD(parent.id, 5, '0'), '.', LPAD(child.id, 5, '0'))
      FROM `pp088_projects` parent 
      INNER JOIN `pp088_projects` child
      ON (parent.id = child.parent_id)
      WHERE child.id = `pp088_projects`.id 
      AND parent.parent_id = 0
    UNION 
    SELECT CONCAT(LPAD(parent.id, 5, '0'), '.', LPAD(child.id, 5, '0'), '.', 
            LPAD(grandchild.id, 5, '0')) 
      FROM `pp088_projects` parent
      INNER JOIN `pp088_projects` child ON (parent.id = child.parent_id) 
      INNER JOIN `pp088_projects` grandchild ON (child.id = grandchild.parent_id) 
      WHERE grandchild.id = `pp088_projects`.id AND parent.parent_id = 0 ) AS level
  FROM `pp088_projects` , `pp088_project_users`
  WHERE (`pp088_projects`.`id` = `pp088_project_users`.`project_id` 
  AND `pp088_project_users`.`user_id` = '1')
  AND (`pp088_projects`.`completed_on` = '0000-00-00 00:00:00')
  ORDER BY level

因为您只有两个深度级别,所以不需要递归(MySQL对其支持有限);而是简单地按
id
订购:

SELECT   *
FROM     pp088_projects
ORDER BY IF(parent_id, parent_id, id), parent_id, id
在电视上看

或者,如果您想按名称订购:

SELECT      child.*
FROM        pp088_projects child
  LEFT JOIN pp088_projects parent ON child.parent_id = parent.id
ORDER BY    COALESCE(parent.name, child.name), parent.id, child.name

请参见。

“按查询顺序发布”是一个非常糟糕的标题。考虑到人们应该能够为他们相似的问题寻找答案。“问题”根本不是一个描述。这是深度优先,对吗?@didierc是的,按深度排序。你有多少个级别?@didierc只有两个级别,家长和孩子,不适合孩子对孩子。谢谢老板,这对我帮助很大。。再次非常感谢你。