簡體   English   中英

MySQL左連接與右表具有順序和限制

[英]MySQL left join with right table having order and limit

我有一個行程表和一個帶有外鍵的相關圖像表。 我想獲取帶有其第一張圖片的行程列表,因此按排序方式以1個限制排序itineraries_images

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,因為您的定義顯示圖像表中的id為AUTO_INCREMENT因此ORDER BY ii.id DESC中的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

大概您想要每個行程中的第一張圖片。 這是使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM