2009-06-12 4 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 ; 

は、今私は、特定のユーザーが所有する各アルバムからの最初の写真(最低位置#)をつかむしたい:私は参考のためにここにダンプします2(関連)テーブルを持っています。

は、ここで私がしようとしているものです:

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

しかし、having句は効果があるとは思われません。どうしたの?

あなたはORDER BYを使用し、そのような最初の行に検索結果を制限する可能性
+0

分(位置)はおそらく数を返していることを今私に起こります。英語では意味がありますが、クエリとしては意味がありません。しかし、 'position = min(position)'もうまくいきませんし、ORDERingも運行していません。 – mpen

答えて

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

これは動作しているようです。サブクエリを使用することは本当に必要ですか?私の頭の中でとてもシンプルに聞こえるが、私はSQLではないと思う。 – mpen

+0

私はそれが必要だと思う – tekBlues

+0

実際にはもう一つ注意が必要だと思います。これは「ポジション」がユニークであると仮定していますが、とにかくこれをより堅牢にして、分(ポジション)が一意でない場合、アルバムごとに複数の写真を返さないようにすることができますか?私は開発中で、positiongシステムはあまり設定されていません:p – mpen

0

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

+0

Ahh。その質問の詳細を逃した。サブクラスのアプローチが有効です。 – cgmack

関連する問題