mySQL加入一对多

时间:2015-08-10 13:26:17

标签: php mysql join

我在搜索页面上有多个链接在一起的表格。他们目前被查询如下:

SELECT * FROM tripreportentries 
    JOIN tripreport ON tripreportentries.reportid = tripreport.tripreportid 
    JOIN user_details on tripreportentries.userid = user_details.userid
WHERE TripEntryHeading LIKE '%%' AND tripreportentries.ispublic = 1
ORDER BY tripreportentryid

我已经创建了一个名为tripphotos的新表,其表列名为:

  • tripphotoid
  • reportid
  • 的EntryID
  • photoname

问题是每个条目在照片表中可以有多张相应的照片。

我希望找到一种方法将新表连接到上面的语句,但不会为每个条目id返回几行。

关于如何加入此表的任何想法?

编辑 - 我还想将一个图像绑定到返回的行而不是所有图像只是这样我可以在浏览页面上将图像显示为缩略图

1 个答案:

答案 0 :(得分:1)

我通常会按非聚合列出每个列和组,但mySQL会允许我相信;给予mySQL小组扩展;我们希望tripReport和user_Details列对于每个加入的光子名称都是相同的。

SELECT tripReport.*, user_details.*, max(photoname) as maxPhotoPerReport 
    FROM tripreportentries 
    JOIN tripreport ON tripreportentries.reportid = tripreport.tripreportid 
    JOIN user_details ON tripreportentries.userid = user_details.userid
    JOIN tripphotos ON tripreportentries.reportid = tripPhotos.ReportID
WHERE TripEntryHeading LIKE '%%' AND tripreportentries.ispublic = 1
GROUP BY ReportId
ORDER BY tripreportentryid

或者我们可以使用内嵌视图来获取每个报告的最大照片,然后将该集合加入基本查询。

SELECT * 
    FROM tripreportentries 
    JOIN tripreport ON tripreportentries.reportid = tripreport.tripreportid 
    JOIN user_details on tripreportentries.userid = user_details.userid
    JOIN (SELECT max(photoName) as MaxPhotoPerReport, ReportID 
          FROM TripPhotos 
          GROUP BY  ReportID) B 
        ON B.ReportID = tripReport.ReportId
WHERE TripEntryHeading LIKE '%%' AND tripreportentries.ispublic = 1
ORDER BY tripreportentryid