第一次尝试内部联接并且事情进展顺利,只有最后一步缺少从我的数据库接收正确的数据。这是我的SQL查询:
SELECT roadtrip_tblgeneral.*, roadtrip_tblhotels.hotel, roadtrip_tbllocation.location, roadtrip_tbltransport.transport
FROM roadtrip_tblgeneral
INNER JOIN roadtrip_tblhotels
ON roadtrip_tblgeneral.id = roadtrip_tblhotels.tripid
INNER JOIN roadtrip_tbllocation
ON roadtrip_tblgeneral.id = roadtrip_tbllocation.tripid
INNER JOIN roadtrip_tbltransport
ON roadtrip_tbltransport.id = roadtrip_tbltransport.tripid
WHERE roadtrip_tblgeneral.tripcode = 'cb8v73x9'
这是我从数据库得到的响应:一切看起来很好,但是一个用户可以将多个车辆添加到具有相同ID的传输中,并且我希望得到所有这些而不仅仅是一个。 (例如,地铁,汽车,自行车......)
id tripname tripcode hotel location transport
1 London cb8v73x9 Seaside London Metro
答案 0 :(得分:1)
我认为这可能是你的问题
ON roadtrip_tbltransport.id = roadtrip_tbltransport.tripid
您似乎试图根据与第一个正在加入的表无关的条件来连接两个表
看看之前行的模式,你的意思是:
ON roadtrip_tblgeneral.id = roadtrip_tbltransport.tripid
正如@kickstart所说,您可以通过将SELECT语句更改为
将所有传输模式移动到一列中SELECT roadtrip_tblgeneral.*, roadtrip_tblhotels.hotel, roadtrip_tbllocation.location, GROUP_CONCAT(roadtrip_tbltransport.transport)
如果您需要单独访问每个传输类型,最好在应用程序级别处理此问题,但如果您想要的只是一个逗号分隔的传输模式作为单个项目,则GROUP_CONCAT()应该没问题
答案 1 :(得分:0)
使用GROUP BY和GROUP_CONCAT获取一个字段中使用的所有传输,值为逗号分隔
SELECT roadtrip_tblgeneral.*, roadtrip_tblhotels.hotel, roadtrip_tbllocation.location, GROUP_CONCAT(roadtrip_tbltransport.transport)
FROM roadtrip_tblgeneral
INNER JOIN roadtrip_tblhotels
ON roadtrip_tblgeneral.id = roadtrip_tblhotels.tripid
INNER JOIN roadtrip_tbllocation
ON roadtrip_tblgeneral.id = roadtrip_tbllocation.tripid
INNER JOIN roadtrip_tbltransport
ON roadtrip_tblgeneral.id = roadtrip_tbltransport.tripid
WHERE roadtrip_tblgeneral.tripcode = 'cb8v73x9'
GROUP BY roadtrip_tblgeneral.id
请注意,您应该真正使用GROUP BY子句中的所有非聚合字段,但上述情况应该有效。