3

第一次尝试内部连接,一切进展顺利,只是缺少最后一步来从我的数据库接收正确的数据。这是我的 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
4

2 回答 2

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() 应该没问题,以逗号分隔的传输模式作为单个项目

于 2013-05-14T09:50:08.633 回答
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 子句中的所有非聚合字段,但以上应该有效。

于 2013-05-14T09:56:41.277 回答