#mysql #sql #sql-order-by
#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
Я имею в виду, что упорядочение должно происходить по имени пользователя, но записи с одним и тем же родителем должны отображаться вместе и чуть ниже записи для родителя.
Я использую MySQL.
Ответ №1:
попробуйте этот новый ответ:
SELECT *
FROM table t
ORDER BY
CONCAT(parent, name)
он объединил две строки, поэтому порядок должен быть таким:
abc
abcmno
abcpqr
def
defqfx
xyz
Комментарии:
1. Проблема в том, что при заказе предполагается, что ‘name’ в алфавитном порядке больше, чем ‘parent’. Если имя меньше, сортировка происходит не так, как ожидалось.
2. Я предполагаю, что вы имели в виду имя, а не идентификатор.
Ответ №2:
Что-то вроде этого (не обязательно точно подобное этому):
SELECT *
FROM atable
ORDER BY COALESCE(CONCAT(parent, '.'), '') name
Я бы на самом деле попытался заменить '.'
символом, который вряд ли появится в именах.
Ответ №3:
Используйте приведенный ниже запрос:
Select * from table_name
Order by
name, parent;
Ответ №4:
это вообще не проблема? поймай это:
select * from mytable order by parent, name
Ответ №5:
Самая большая проблема, с которой вы сталкиваетесь, заключается в том, что вам нужны 2 довольно разных аспекта. Вы хотите, чтобы это было в порядке имени пользователя, но если есть соответствующий родительский элемент, вы хотите его сгруппировать.
Наиболее очевидным было бы
select username, parent from mytable
order by parent,username
group by parent
Но это все равно сначала сортирует его по родительскому элементу.
Я уверен, что можно получить именно то, что вы хотели, но у меня еще не было caffine, чтобы выработать простое полное решение.
Ответ №6:
Другое в Oracle я счел необходимым написать хранимый процесс для выполнения иерархического упорядочения. Некоторые СУБД предлагают CTE (общие табличные выражения), которые могут давать тот же результат. Я не знаком с MySQL и не знаю, какая у него поддержка, но может помочь следующее.
Также погуглите «Деревья и иерархии Джо Селко»