簡體   English   中英

在mysql子查詢中使用limit。 最簡單的選擇?

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

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