如何联接两个表并获取正确的记录

时间:2019-03-27 15:34:03

标签: php mysql

我有一个表包含页面/广告,另一个表包含每个广告x张图片。 图片表也有一个“排序”列。

我正在尝试编写一些SQL,我从广告中获得标题,而只有一张图片的排序顺序最低。

到目前为止,我正在这样做。但这只是给我一张照片,而不是我想要的照片。

SELECT ads.id, ads.title, min(ads_gallery_files.filename) as picture, clients.name
FROM ads LEFT JOIN ads_gallery_files ON ads_gallery_files.ads_id=ads.id 
GROUP BY ads.id

我还有一个客户表,可以在其中查看谁制作了广告。 我正在使用左联接来收集该名称

LEFT JOIN clients ON clients.id=ads.client_id

也许我必须在SELECT中执行SELECT,这不知道。

1 个答案:

答案 0 :(得分:0)

您将需要一个表表达式(我将其命名为m)来计算每个广告的最小sortorder。然后,您可以仅加入该表以过滤掉不需要的“额外”行。

例如:

select
   a.id, a.title, f.filename as picture, c.name
from ads a
join ads_gallery_files f on f.ads_id = a.id
join ( -- this is called a "table expression" since it acts as a table
  select ads_id, min(sortorder) as minorder
  from ads_gallery_files f
  group by ads_id
) m on m.ads_id = f.ads_id and m.minorder = f.sortorder
left join clients c on c.id = a.client_id