[英]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.