世界各地发生事件的假设数据库。
EVENT
event_id | event_name 1 | Great Wall Party 2 | Times Square Dance 3 | Sydney Blowout
PLACE
place_id | place_name 54 | Times Square 55 | Manhattan 56 | New York City 57 | New York State 58 | USA
EVENTPLACE
eventid | placeid 2 | 54
RELATEDPLACES
rel_placeid1 | rel_placeid2 54 | 55 55 | 56 56 | 57 57 | 58
如果我展示活动,时代广场舞,我想通过RELATEDPLACES表(即时代广场,曼哈顿,纽约市,纽约州,显示出现在其相关地点链上的所有地方)美国)。同样,如果我将所有活动称为美国,我希望将时代广场的舞蹈列入其中,因为它的EVENTPLACE(时代广场)出现在从美国开始的RELATEDPLACES协会链的底部。
我认为我需要在我的SQL命令中创建一个内部循环,以便它一直执行,直到链中断。到目前为止(使用上面两个例子中的第一个)我有: -
SELECT place_nm FROM eventplace
INNER JOIN relatedplaces ON placeid = rel_placeid1
INNER JOIN place ON rel_placeid2 = place_id
[where the loop should begin:
INNER JOIN relatedplaces ON place_id = rel_placeid1
INNER JOIN place ON rel_placeid2 = place_id
end loop]
WHERE eventid = ‘2’;
由于我需要为每个循环使用不同的表别名,这很复杂,这意味着我无法在打开的SELECT语句中声明我想要在同一列中收集所有place_name数据。
我不确定我想要达到的目标是否可能,我目前的后备解决方案是列出所有时代广场在RELATEDPLACES表中的相关位置,而不仅仅是下一个最大的地方(曼哈顿),但是这似乎是更好的解决方案(并且还可以节省数据库空间)。
有人可以建议我可能需要使用的SQL SELECT命令吗?干杯!
答案 0 :(得分:0)
相当有趣的问题。但问题是MySQL目前不允许递归查询。您有两种选择:
RelatedEvents
级别,并为其创建查询(使用excel或小型C代码)