Php mySQL一对多连接
我在搜索页面上有多个链接在一起的表。它们当前的查询方式如下:Php mySQL一对多连接,php,mysql,join,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
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的新表,表列名为:
- 三像体
- 报告ID
- entryid
- 照片名
关于如何加入这张桌子有什么想法吗
编辑-我还想将一个图像绑定到返回的行,而不是所有图像,这样我就可以在浏览页面上将图像显示为缩略图。我通常会按非聚合列出每个列和组,但我相信mySQL会允许这样做;通过扩展赋予mySQL组;我们希望tripReport和user_Details列对于每个加入的photoname都是相同的
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
隐马尔可夫模型。。。只是猜测;使用
group\u concat()
然后可能加入。“关于如何加入此表的想法?”使用子查询(内联视图)limit 1或使用聚合。你必须问自己的问题是,你想要返回哪个图像。您可以使用聚合并返回最小/最大照片;假设没问题。但如果你真的在乎哪张照片,就需要明确要求。如果需要每个查询的最新/最旧结果,则可以使用子查询按1限制结果,并按EntryId desc或升序进行排序record@xQbert谢谢你的回复。我现在对返回图像没有真正的兴趣,这将是第二阶段的改变,我将改变整个结构以及这个页面如何工作。目前正在寻找一个快速解决方案。这帮助我解决了问题,但并不完全正确,因为它为每一行返回相同的照片,即使照片与该条目不匹配,但我从中得到了修复。我假设连接条件基于名称。这是连接关系的问题吗?