MySQL左键加入右表有顺序和限制

时间:2014-03-24 19:52:41

标签: 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

一直在查看子查询......但仍然无法使其工作:(

非常感谢,

抢劫。

2 个答案:

答案 0 :(得分:1)

这将完成工作并将为您提供最新的image_src,因为您的定义显示图像表中的ID为AUTO_INCREMENT,因此group_concat中的ORDER BY ii.id DESC将按降序对图像进行分组,并使用{{ 1}}会给你最新的图片

SUBSTRING_INDEX

答案 1 :(得分:0)

据推测,您想要每个行程中的第一张图片。这是您使用not exists

执行此操作的方法
SELECT i.*, ii.image_src, ii.caption 
FROM itineraries i LEFT OUTER JOIN
     itineraries_images ii
     ON i.id=ii.itineraries_id AND ii.is_live=1 
WHERE i.is_live = 1 and
      not exists (select 1
                  from itineraries_images ii2
                  where ii2.itineraries_id = ii.itinieraries_id and
                        ii2.is_live = 1 and
                        ii2.sort > ii.sort
                 )
ORDER BY i.id