2009-06-12 77 views
0

我需要一些幫助來制定此查詢。我有兩個(相關)表,我將傾這裏以供參考:MySQL查詢:獲取所有專輯封面

CREATE TABLE IF NOT EXISTS `albums` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `user_id` int(11) NOT NULL COMMENT 'owns all photos in album', 
    `parent_id` int(11) DEFAULT NULL, 
    `left_val` int(11) NOT NULL, 
    `right_val` int(11) NOT NULL, 
    `name` varchar(80) COLLATE utf8_unicode_ci NOT NULL, 
    `num_photos` int(11) NOT NULL, 
    `date_created` int(11) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `parent_id` (`parent_id`,`name`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ; 

CREATE TABLE IF NOT EXISTS `photos` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `album_id` int(11) NOT NULL, 
    `filename` varchar(32) COLLATE utf8_unicode_ci NOT NULL, 
    `num_views` int(11) NOT NULL DEFAULT '0', 
    `date_uploaded` int(11) NOT NULL, 
    `visibility` enum('friends','selected','private') COLLATE utf8_unicode_ci NOT NULL, 
    `position` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=26 ; 

現在我想抓住從某個用戶擁有的每一張專輯的第一張照片(最低位置#)。

這裏就是我想:

SELECT * FROM albums JOIN photos ON photos.album_id=albums.id WHERE albums.user_id=%s GROUP BY album_id HAVING min(position) 

但having子句似乎沒有產生效果。有什麼問題?

+0

現在發生,我認爲分鐘(位置)可能只是返回一個數字。它在英語中是有意義的,但不是一個查詢。但`position = min(position)`也不起作用,而且我也沒有ORDER的運氣。 – mpen 2009-06-12 00:34:24

回答

1
select * from album, photos 
where album_id=albums.id 
and albums.user_id='user_id' 
and photos.id = (select id from photos where 
album_id = album.id order by position LIMIT 1) 
0

您可以使用ORDER BY和限制搜索結果第一行,像這樣:

SELECT photos.* 
FROM 
    albums, photos 
WHERE 
    photos.album_id=albums.id 
    AND albums.user_id=%s 
ORDER BY 
    photos.position ASC 
LIMIT 1 
+1

每個用戶可以擁有多個相冊... – tekBlues 2009-06-12 00:46:26

+0

啊。錯過了這個問題的細節。您的子查詢方法有效。 – cgmack 2009-06-12 01:02:25