2016-05-07 7 views
0

Мне нужна помощь в построении MySQL-запроса, который выведет все строки в определенном порядке. Определение таблицы содержит id, sub_id и name. Столбец sub_id используется для указания того, что данная строка должна быть сгруппирована в пределах id, а если sub_id пуст/0/null, то строка представляет собой строку верхнего уровня.Заказ по подгруппе

Желаемый порядок сортировки - name, за исключением того, что я хочу, чтобы все sub_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 

(расстояние между подгруппами только для иллюстративных целей)

помочь? Заранее спасибо!

ответ

0

Это следует сделать это:

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 
+0

спасибо за умный ответ. Однако я думаю, что сначала это будет сортироваться по id. Так, например, строка с id = 1, name = 'xyz' и другая строка с id = 2, name = 'abc' будут неправильно отсортированы. Кроме того, я хочу, чтобы строка с sub_id = NULL была отсортирована сначала внутри подгруппы. – yahermann

+0

Я предлагаю вам создать sqlfiddle для этого http://sqlfiddle.com/ Я не уверен, думаю, что он не работает, или он действительно не работает ... – Bulat

Смежные вопросы