[英]using limit in a mysql subquery. easiest alternative?
我有以下樣本記錄:
Master Image Table (named Image)
ImgID aFile AlbumID
1 abc.jpg 1
2 def.jpg 1
3 ghi.jpg 1
1 Qyz.jpg 2
2 Qxz.jpg 2
3 Qxq.jpg 2
1 Xyz.jpg 3
2 Xxz.jpg 3
3 Xxq.jpg 3
Album table
AlbumID Date
1 2013-01-02
2 2014-01-03
3 2012-01-03
每周,都會向數據庫中添加一張新的圖像相冊,並在日期上加上戳記。 我一直想檢索的只是從最新專輯開始的前兩個圖像文件名。 在這種情況下,值應為Qyz.jpg和Qxz.jpg
到目前為止,這是我在SQL中嘗試過的:
select aFile from Image,Album where Image.AlbumID=Album.AlbumID and AlbumID in (select AlbumID from Album order by Date Desc limit 0,1) order by ImgID asc limit 0,2
Mysql返回此錯誤:
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' []
而且我相信我正在使用mysql 5.0版。 如果不升級mysql並且不進行兩個單獨的查詢,是否有解決方案?
這是一種方法。 它的伸縮性不是特別好,所以如果它看起來很慢,那么請看一下使用變量的解決方案。
DROP TABLE IF EXISTS images;
CREATE TABLE images
(image_id INT NOT NULL AUTO_INCREMENT
,filename VARCHAR(12) NOT NULL UNIQUE
,album_id INT NOT NULL
,PRIMARY KEY(album_id,image_id)
)ENGINE = MyISAM;
INSERT INTO images VALUES
(1,'abc.jpg',1),
(2,'def.jpg',1),
(3,'ghi.jpg',1),
(1,'Qyz.jpg',2),
(2,'Qxz.jpg',2),
(3,'Qxq.jpg',2),
(1,'Xyz.jpg',3),
(2,'Xxz.jpg',3),
(3,'Xxq.jpg',3);
DROP TABLE IF EXISTS albums;
CREATE TABLE albums
(album_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,date DATE NOT NULL
);
INSERT INTO albums VALUES
(1,'2013-01-02'),
(2,'2014-01-03'),
(3,'2012-01-03');
SELECT a.*,c.*
FROM albums a
JOIN
( SELECT MAX(date) max_date FROM albums) b
ON b.max_date = a.date
JOIN
( SELECT x.*
FROM images x
JOIN images y
ON y.album_id = x.album_id
AND y.image_id <= x.image_id
GROUP
BY x.album_id
, x.image_id
HAVING COUNT(*) <=2
) c
ON c.album_id = a.album_id;
+----------+------------+----------+----------+----------+
| album_id | date | image_id | filename | album_id |
+----------+------------+----------+----------+----------+
| 2 | 2014-01-03 | 1 | Qyz.jpg | 2 |
| 2 | 2014-01-03 | 2 | Qxz.jpg | 2 |
+----------+------------+----------+----------+----------+
2 rows in set (0.00 sec)
如果您不介意兩個圖像都在一個字符串中,那么這是使用GROUP_CONCAT
和SUBSTRING_INDEX
的一種真正的方法(因為GROUP_CONCAT
沒有LIMIT
)。
SELECT
SUBSTRING_INDEX(GROUP_CONCAT(aFile ORDER BY ImgID ASC), ',', 2) AS files
FROM Image
JOIN Album USING(AlbumID)
GROUP BY AlbumID
ORDER BY Date DESC
LIMIT 1
這應該返回一行,如下所示:
files
Qyz.jpg,Qxz.jpg
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.