我知道有很多类似于这个的问题,但似乎没有什么适合我的问题。我花了相当多的时间研究这个问题,然后提出了一个不会选择最后一张图片的查询,稍后会详细介绍。所以,问题是有3个表
table:images
newdata
表:优惠
| Field | Type
+-------------------+------------------
| id | int(10) unsigned
| filename | varchar(255)
| created_at | timestamp
| updated_at | timestamp
和连接它们的表:offer_images
| Field | Type
+-------------------+------------------
| id | int(10) unsigned
| message | varchar(255)
| created_at | timestamp
所以,问题是: 如何从链接到商品的图像表中选择包含上次更新图像(基于updated_at)的所有商品。这是我到目前为止所得到的:
| Field | Type
+----------+------------------
| offer_id | int(10) unsigned
| image_id | int(10) unsigned
查询选择了所有内容,除了它忽略了updated_at字段之外它还在工作。
答案 0 :(得分:0)
试试这个:
SELECT o.*, i.*
FROM offers AS o
INNER JOIN (
-- Get the latest update_at date per offer_id
SELECT oi.offer_id, MAX(updated_at) AS max_updated_at
FROM offer_images AS oi
INNER JOIN images AS i ON oi.image_id = i.id
GROUP BY oi.offer_id
) AS d ON o.id = d.offer_id
INNER JOIN offer_images AS oi ON oi.offer_id = d.offer_id
INNER JOIN images AS i ON i.id = oi.image_id AND i.updated_at = d.max_updated_at
该查询使用派生表来获取每update_at
的最新offer_id
日期。使用此日期,我们可以加入images
表,以获得每组最大的记录。