Как перечислить дочерний после родительского в MySQL запросе - PullRequest
0 голосов
/ 01 ноября 2018

у меня есть данные в таблице MySQL, как это

id ||  act  || parent || level
1  ||   13  ||  0     ||  1
2  ||   13  ||  0     ||  1 
3  ||   13  ||  1     ||  2
4  ||   13  ||  2     ||  2
5  ||   13  ||  1     ||  2

Как запросить в MySQL, если я хочу результат, как это:

id ||  act  || parent || level
1  ||   13  ||  0     ||  1
3  ||   13  ||  1     ||  2 
5  ||   13  ||  1     ||  2
2  ||   13  ||  0     ||  1
4  ||   13  ||  2     ||  2

Спасибо, прежде чем :) 1007 *

1 Ответ

0 голосов
/ 01 ноября 2018

Хитрость в том, чтобы определить пользовательский параметр сортировки. Это parent значение равно 0, мы можем просто использовать значение id этой строки; иначе значение parent. Это связано с тем, что значение parent для других уровней совпадает со строкой id для родителя.

Мы также будем использовать несколько уровней Order By, при этом упорядочение второго уровня будет выполняться с использованием id.

Вы можете сделать что-то вроде этого:

SELECT 
  id, 
  act, 
  parent, 
  level, 
  (CASE WHEN parent = 0 THEN id ELSE parent END) AS custom_sort_parameter 
FROM 
  your_table_name 
ORDER BY custom_sort_parameter, id 

Я выполнил вычисление custom_sort_parameter в предложении Select для удобства чтения кода и облегчения понимания. Но вместо этого вы можете переместить его в предложение Order By (чтобы избежать получения еще одного ненужного столбца). Это показано в демоверсии ниже.


Схема (MySQL v5.7)

Create table your_table_name 
(id int, act int, parent int, level int);

Insert into your_table_name 
VALUES (1,13,0,1), 
       (2,13,0,1), 
       (3,13,1,2), 
       (4,13,2,2), 
       (5,13,1,2);

Запрос № 1

SELECT 
  id, 
  act, 
  parent, 
  level
FROM 
  your_table_name 
ORDER BY 
  CASE 
    WHEN parent = 0 THEN id 
    ELSE parent 
  END 
  , id;

| id  | act | parent | level |
| --- | --- | ------ | ----- |
| 1   | 13  | 0      | 1     |
| 3   | 13  | 1      | 2     |
| 5   | 13  | 1      | 2     |
| 2   | 13  | 0      | 1     |
| 4   | 13  | 2      | 2     |

Просмотр на БД Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...