MySQL query: Получить все обложки альбомов - PullRequest
0 голосов
/ 12 июня 2009

Мне нужна помощь в формулировании этого запроса. У меня есть две (соответствующие) таблицы, которые я дам здесь для справки:

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)

Но предложение о наличии, похоже, не оказывает влияния. В чем проблема?

Ответы [ 2 ]

1 голос
/ 12 июня 2009
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 голосов
/ 12 июня 2009

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...