我正在制作一个旅游项目,但遇到了一个问题。我已经创建了一个数据库:
ID Source Destination
1 C1 C2
2 C3 c4
3 C3 C5
4 C4 C6
5 C8 C9
6 C2 C3
当我从 C1->C6 进行游览时,它应该遵循路径 c1->c2->c3->c4->c6。但是当通过查询检索时,到达 c3 时出现冲突:还有另一个 C3->c5。
如何克服这个问题?
首先,我通过检查 mysql 将 c1 作为源 由此,我通过该目的地获取目的地,并将其作为源检查相关目的地
最佳答案
尝试:
CREATE TABLE test (
ID INTEGER NOT NULL,
SOURCE CHAR(2) NOT NULL,
DESTINATION CHAR(2) NOT NULL
);
INSERT INTO test VALUES (1, 'C1', 'C2');
INSERT INTO test VALUES (2, 'C3', 'C4');
INSERT INTO test VALUES (3, 'C3', 'C5');
INSERT INTO test VALUES (4, 'C4', 'C6');
INSERT INTO test VALUES (5, 'C8', 'C9');
INSERT INTO test VALUES (6, 'C2', 'C3');
然后:
SELECT
CONCAT_WS(
'->',
A.SOURCE,
A.DESTINATION,
B.DESTINATION,
C.DESTINATION,
D.DESTINATION
)
FROM test A
LEFT JOIN test B ON B.SOURCE = A.DESTINATION
LEFT JOIN test C ON C.SOURCE = B.DESTINATION
LEFT JOIN test D ON D.SOURCE = C.DESTINATION
WHERE
A.SOURCE = 'C1'
AND 'C6' IN (A.DESTINATION, B.DESTINATION, C.DESTINATION, D.DESTINATION);
这给出:
C1->C2->C3->C4->C6
请记住,此示例仅给出最大深度为 4 的路径,但您可以轻松扩展它。您还将获得所有可能的路径(如果有多个)。因此,您需要决定选择哪一个。
关于php - 起点和终点列表的基本非加权寻路,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13578454/