注意:我使用的是MySQL 5.5.36。
我正在为一款游戏设计功能,该游戏有房间,但除了出口之外,与其他房间没有任何坐标或关系。我创建了一个小提琴来展示一小段数据:
https://dbfiddle.uk/?rdbms=mysql_5.5&fiddle=9d4ebc91e10a67e187fb4a4b623728da
所以在实际应用中,我可能会尝试将一个房间连接到几十跳或更远的另一个房间。我不确定如何最好地使用我必须找到的从房间a到房间Z的路径的数据。
这里有一个想法:
SET @room := 555; -- setting variable for first room
SET @troom := 123; -- setting variable for last room
SELECT r1.room_num, r1.target_room, r2.target_room, r3.target_room, r4.target_room, r5.target_room, r6.target_room, r7.target_room
FROM room_map r1
JOIN room_map r2 ON r1.target_room=r2.room_num
JOIN room_map r3 ON r2.target_room=r3.room_num
JOIN room_map r4 ON r3.target_room=r4.room_num
JOIN room_map r5 ON r4.target_room=r5.room_num
JOIN room_map r6 ON r5.target_room=r6.room_num
JOIN room_map r7 ON r6.target_room=r7.room_num
WHERE r1.room_num=@room -- using first room variable
AND r7.target_room=@troom -- using last room variable ;
在这把小提琴里:https://dbfiddle.uk/?rdbms=mysql_5.5&fiddle=6fb252fbc9495a34480e3f11175fad3e
此查询将为您提供3行作为匹配第一个和最后一个房间编号条件的结果。这是因为列之间存在多对多的关系。下一步是让你尝试这个查询——添加适合你需求的条件,并用新的细节/结果更新你的问题。
另外,看看这是否有帮助。