Упорядочить строки результата MySQL на основе поля «next_id» - PullRequest
2 голосов
/ 27 апреля 2011

В настоящее время я работаю с таблицей базы данных, которая структурирована следующим образом:

 ______________________________
|  id  |  content  |  next_id  |
|------|-----------|-----------|
|  1   |  (value)  |     4     |
|  2   |  (value)  |     1     |
|  3   |  (value)  |   (NULL)  |
|  4   |  (value)  |     3     |
 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Значение поля next_id определяет идентификатор строки данных, которая должна следовать за ней.Значение NULL означает, что ни одна строка не следует за ним.

Есть ли способ, которым я могу запросить базу данных таким образом, чтобы в результирующих строках был упорядочен этот метод?Например, в приведенном выше случае строки должны быть возвращены в таком порядке, чтобы идентификаторы были в следующем порядке: 2, 1, 4, 3.Я ищу решение, которое может сделать это независимо от количества строк в этой последовательности.

Я знаю, что можно изменить порядок результатов после извлечения их из базы данных (используя язык программирования I 'я работаю с), но я надеюсь, что есть способ, которым я могу сделать это в SQL.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2011

У меня есть кое-что, что близко.

/*one select to init the @next variable to the first row*/
select @next:= id from table1 order by isnull(next_id) asc, next_id asc limit 1;


select distinct a.id, a.next_id from table1 b
  inner join
  (
    select @rank:= id as id, @next:= next_id as next_id from table1
    where id = @next
  ) a
  on (b.id = b.id);

Это выводит

+----+---------+
| id | next_id |
+----+---------+
| 2  | 1       |
| 1  | 4       |

А потом останавливается. Если бы я только мог найти способ продолжить ...

В любом случае, такого рода принудительное введение значений в запрос достаточно хитроумно при ранжировании, не говоря уже о такого рода вещах, поэтому, возможно, я захожу в тупик.

0 голосов
/ 27 апреля 2011

Я не вижу решения без такого количества самообъединений, как у вас есть ряды.Вместо этого я построил бы вложенный набор из него во временную таблицу, используя алгоритм стека push down, а затем получил бы полное дерево.

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