Реконструкция пути узла SQL
У меня есть таблица, которая содержит данные о том, какой узел был посещен. Возможно, что узел может быть посещен несколько раз. Для этого у меня есть другая таблица, которая содержит данные посещаемого узла, узла, посещенного до и узла, посещенного после. Теперь я хотел бы восстановить путь в порядке посещения, используяMySQL . Я не могу понять, как сделать запрос на это, поэтому я прошу здесь о помощи.
Пример
Допустим, кто-то посетил эти узлы в таком порядке:
4->5->6->7->4->6->10->12->7->15
Таблицы будут выглядеть следующим образом:
Визиты
+---------+-------------------------------+----------+------------+
| id | user | node | view_count |
+---------+-------------------------------+----------+------------+
| 1 | l3lie1frl77j135b3fehbjrli5 | 4 | 2 |
+---------+-------------------------------+----------+------------+
| 2 | l3lie1frl77j135b3fehbjrli5 | 5 | 1 |
+---------+-------------------------------+----------+------------+
| 3 | l3lie1frl77j135b3fehbjrli5 | 6 | 2 |
+---------+-------------------------------+----------+------------+
| 4 | l3lie1frl77j135b3fehbjrli5 | 7 | 2 |
+---------+-------------------------------+----------+------------+
| 5 | l3lie1frl77j135b3fehbjrli5 | 10 | 1 |
+---------+-------------------------------+----------+------------+
| 6 | l3lie1frl77j135b3fehbjrli5 | 12 | 1 |
+---------+-------------------------------+----------+------------+
| 7 | l3lie1frl77j135b3fehbjrli5 | 15 | 1 |
+---------+-------------------------------+----------+------------+
Revisits
+---------+-------------------------------+-------+----------------+-----------------+
| id | user | node | after_visiting | before_visiting |
+---------+-------------------------------+-------+----------------+-----------------+
| 1 | l3lie1frl77j135b3fehbjrli5 | 4 | 7 | 6 |
+---------+-------------------------------+-------+----------------+-----------------+
| 2 | l3lie1frl77j135b3fehbjrli5 | 6 | 4 | 10 |
+---------+-------------------------------+-------+----------------+-----------------+
| 3 | l3lie1frl77j135b3fehbjrli5 | 7 | 12 | 15 |
+---------+-------------------------------+-------+----------------+-----------------+
Я хотел бы построить запрос, который вернул бы путь в виде строки или списка узлов, как это:
4,5,6,7,4,6,10,12,7,15
Или
+---------+--------+
| index | node |
+---------+--------+
| 1 | 4 |
+---------+--------+
| 2 | 5 |
+---------+--------+
| 3 | 6 |
+---------+--------+
| 4 | 7 |
+---------+--------+
| 5 | 4 |
+---------+--------+
| 6 | 6 |
+---------+--------+
| 7 | 10 |
+---------+--------+
| 8 | 12 |
+---------+--------+
| 9 | 7 |
+---------+--------+
| 10 | 15 |
+---------+--------+
Любая помощь будет очень признательна.1 ответ:
Измените свой дизайн, чтобы иметь 1 таблицу посещений:
+----+------+------+ | id | user | node | +----+------+------+ | 1 | xx | 4 | | 2 | xx | 5 | | 3 | xx | 6 | | 4 | xx | 7 | | 5 | xx | 4 | | 6 | xx | 6 | | 7 | xx | 10 | | 8 | xx | 12 | | 9 | xx | 7 | | 10 | xx | 15 | +----+------+------+
затем вы можете выбрать view_count следующим образом:select node, count(*) view_count from visits where user = :user group by node
И путь такой:
select group_concat(node order by id separator ',') path from visits where name = :name