Mysql SQL节点路径重构

Mysql SQL节点路径重构,mysql,sql,algorithm,graph-theory,Mysql,Sql,Algorithm,Graph Theory,我有一个表,其中包含关于访问了哪个节点的数据。一个节点可能会被访问多次。为此,我有另一个表,其中包含访问的节点、之前访问的节点和之后访问的节点的数据。现在,我想使用MySQL按访问顺序重建路径。我似乎不知道如何对此进行查询,所以我在这里寻求帮助 示例 假设有人按以下顺序访问了这些节点: 4->5->6->7->4->6->10->12->7->15 这些表如下所示: 4,5,6,7,4,6,10,12,7,15 select node,

我有一个表,其中包含关于访问了哪个节点的数据。一个节点可能会被访问多次。为此,我有另一个表,其中包含访问的节点、之前访问的节点和之后访问的节点的数据。现在,我想使用MySQL按访问顺序重建路径。我似乎不知道如何对此进行查询,所以我在这里寻求帮助

示例

假设有人按以下顺序访问了这些节点:

4->5->6->7->4->6->10->12->7->15
这些表如下所示:

4,5,6,7,4,6,10,12,7,15
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
访问

+---------+-------------------------------+----------+------------+
| 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          |
+---------+-------------------------------+----------+------------+
+---------+-------------------------------+-------+----------------+-----------------+
| id      | user                          | node  | after_visiting | before_visiting |
+---------+-------------------------------+-------+----------------+-----------------+
| 1       | l3lie1frl77j135b3fehbjrli5    | 4     |       7        |        6        |
+---------+-------------------------------+-------+----------------+-----------------+
| 2       | l3lie1frl77j135b3fehbjrli5    | 6     |       4        |       10        |
+---------+-------------------------------+-------+----------------+-----------------+
| 3       | l3lie1frl77j135b3fehbjrli5    | 7     |      12        |       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          |
+---------+-------------------------------+----------+------------+
+---------+-------------------------------+-------+----------------+-----------------+
| 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
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


任何帮助都将不胜感激

将您的设计更改为有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 | +----+------+------+ 这条路是这样的:

4,5,6,7,4,6,10,12,7,15
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

你不能改变设计吗?最好只存储表
visions
中排序的所有访问和重访,而不使用
view\u count
列…附议。从原始路径获取统计信息要比从另一个路径获取统计信息容易得多。+在本设计中,如果访问6>4>7 3次,则无法区分它们(加入条件将重复访问三次)好的,谢谢。我可以改变设计。你能为这个问题提供一个解决方案,让我给你一个可以接受的答案吗?