php - 如何连接两个表并获得正确的记录

标签 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,不知道。

最佳答案

您需要一个表表达式(我将其命名为 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

关于php - 如何连接两个表并获得正确的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55381032/

相关文章:

php - 使用 php 导出的文本文件不会更新

mysql - 如何在mysql查询中插入今天的日期?

java - 无法使用 Java PreparedStatement 在 MySQL 中存储 UTF-8 内容

php - <link> 上的子请求

php - 来自 PHP 的 MySQL 查询

php - htaccess 搜索查询重定向/重写

php - 使用输入字段将小时和分钟添加到日期时间?

php - Laravel 6 : FatalThrowableError: Class 'GuzzleHttp\Client' not found in TransportManager. PHP

php数据库表选择受限

MySQL/JDBC 如何检索查询的完整终端 View (用 +- 显示表)