我有一个行程表和一个带有外键的关联图像表。我想获取包含第一张图片的行程列表,因此按排序排序 itineraries_images,限制为 1
CREATE TABLE itineraries (
id int(10) AUTO_INCREMENT,
is_live tinyint(1),
title varchar(255),
body text,
PRIMARY KEY (id)
)
CREATE TABLE itineraries_images (
id int(10) AUTO_INCREMENT,
itineraries_id int(10),
is_live tinyint(1),
caption varchar(255),
image_src varchar(255),
sort smallint(5),
PRIMARY KEY (id),
KEY itineraries_id (itineraries_id)
)
我正在执行左连接,但它不会对连接表进行排序
SELECT i.*, ii.image_src, ii.caption
FROM itineraries AS i
LEFT OUTER JOIN itineraries_images AS ii ON i.id=ii.itineraries_id AND ii.is_live=1
WHERE i.is_live=1
GROUP BY ii.itineraries_id
ORDER BY i.id, ii.sort
一直在研究子查询...但仍然无法让它工作:(
非常感谢
抢劫。
最佳答案
这将完成这项工作,并为您提供最新的 image_src,因为您的定义显示 images 表中的 id 为 AUTO_INCRMENT
,因此 group_concat 中的 ORDER BY ii.id DESC
将按降序对图像进行分组,并使用 SUBSTRING_INDEX
将为您提供最新的图像
SELECT i.*,
SUBSTRING_INDEX(GROUP_CONCAT( ii.image_src ORDER BY ii.id DESC ),',',1) image_src ,
SUBSTRING_INDEX(GROUP_CONCAT( ii.caption ORDER BY ii.id DESC ),',',1) caption
FROM itineraries AS i
LEFT OUTER JOIN itineraries_images AS ii ON i.id=ii.itineraries_id AND ii.is_live=1
WHERE i.is_live=1
GROUP BY i.id
ORDER BY i.id, ii.sort
关于MySQL 左连接与具有顺序和限制的右表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22619305/