MySQL 左连接与具有顺序和限制的右表

标签 mysql sql subquery left-join

我有一个行程表和一个带有外键的关联图像表。我想获取包含第一张图片的行程列表,因此按排序排序 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/

相关文章:

SQL - 分组、ID、名称

sql-server - 从 SQL Server 的子查询中选择多列

mysql - 在 HeidiSQL 中排序月份名称

mysql - SQL语言条件多表收集谁信息

mysql - 计算相互共享的关系

sql - ROWLOCK on Delete的目的是什么?何时使用?

sql - 子查询中是否允许 order by 子句

mysql - mysql中如何根据条件添加join

mysql - 使用 SQL 计算访问次数,除了来自 2 个最大访问者的访问次数

java - 在多台计算机上管理 SQL