Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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,我需要帮助构建一个MySQL查询,该查询将按特定顺序输出所有行。表定义包含id、sub\u id和name。sub\u id列用于指示给定行应分组在id中,如果sub\u id为空/0/null,则该行为顶级行 所需的排序顺序是按name排序,但我希望所有sub\u id行都分组到相应的id行中。在每个子组中,每行都应按名称排序 例如,给定此无序表: id sub_id name ===================== 1 0 bananas 2 0

我需要帮助构建一个MySQL查询,该查询将按特定顺序输出所有行。表定义包含
id
sub\u id
name
sub\u id
列用于指示给定行应分组在
id
中,如果
sub\u id
为空/0/null,则该行为顶级行

所需的排序顺序是按
name
排序,但我希望所有
sub\u id
行都分组到相应的
id
行中。在每个子组中,每行都应按名称排序

例如,给定此无序表:

id   sub_id   name
=====================
1    0        bananas
2    0        apples
3    0        apricots
4    2        strawberries
5    2        cherries
6    1        oranges
所需的顺序是:

id   sub_id   name
=====================
2    0        apples
5    2        cherries
4    2        strawberries

3    0        apricots

1    0        bananas
6    1        oranges
(子组之间的间距仅用于说明)

帮忙?提前谢谢

这应该可以做到:

SELECT t.id, t.sub_id, t.name
FROM table t LEFT JOIN table p on t.sub_id = p.id
ORDER BY COALESCE(p.id, t.id), t.name

谢谢你聪明的回答。不过,我认为这将首先按id排序。因此,例如,id=1、name='xyz'的一行和id=2、name='abc'的另一行的排序将不正确。另外,我希望sub_id=NULL的行首先在子组内排序。我建议您为此设置一个SQLFIDLE。我不确定它是否认为不起作用,或者它确实不起作用。。。