SQL Order By查询问题

时间:2011-05-23 06:43:48

标签: mysql sql sql-order-by

我有一个包含以下数据集的表

id   name  parent  
------------------
1    xyz   NULL  
2    def   NULL  
3    mno   abc  
4    abc   NULL  
5    pqr   abc  
6    qfx   def

我想按以下顺序获取数据:

1    abc   NULL  
3    mno   abc  
5    pqr   abc  
2    def   NULL  
6    qfx   def  
4    xyz   NULL

我的意思是ORDERing必须通过用户名进行,但具有相同父级的记录必须一起显示在父级的记录下方。

我正在使用MySQL。

6 个答案:

答案 0 :(得分:2)

尝试这个新答案:

SELECT * 
FROM table t
ORDER BY
    CONCAT(parent, name)

它连接了两个字符串所以它应该这样排序:

abc
abcmno
abcpqr
def
defqfx
xyz

答案 1 :(得分:1)

像这样(不一定完全这样):

SELECT *
FROM atable
ORDER BY COALESCE(CONCAT(parent, '.'), '') + name

我实际上会尝试将'.'替换为不太可能出现在名称中的字符。

答案 2 :(得分:0)

使用以下查询:

Select * from table_name
    Order by
        name, parent;

答案 3 :(得分:0)

根本不是问题?抓住它:

select * from mytable order by parent, name

答案 4 :(得分:0)

你遇到的最大问题是你需要2个不同的方面。您希望它以用户名顺序排列,但如果有匹配的父级,则要对其进行分组。

最明显的是

select username, parent from mytable
order by parent,username
group by parent

但是,这仍然是由父母先排序的。

我确信它可以准确地得到你想要的东西,但是,我还没有找到一个简单的完整解决方案。

答案 5 :(得分:0)

Oracle中的其他我发现有必要编写Stored Proc来进行分层排序。一些RDBMS提供CTE(公用表表达式),可以实现相同的结果。我不熟悉mySql,不知道它有什么支持,但以下内容可能有所帮助。

Wikipedia article

mySql specific

Google“Joe Celko Trees and Hierarchies”