我有一个包含以下数据集的表
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。
答案 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,不知道它有什么支持,但以下内容可能有所帮助。
Google“Joe Celko Trees and Hierarchies”