использование GROUP при select по двум ячекам в строке

OnlyRu

Новичок
использование GROUP при select по двум ячекам в строке

таблица с фотками:

`id` int(16) NOT NULL auto_increment,
`user` int(15) default NULL,
`image` varchar(20) default NULL,
`title` varchar(100) default NULL,
`flag` int(1) NOT NULL default '1',
`status` int(1) NOT NULL default '1',
`counter` int(6) NOT NULL default '0',
`dtm` int(15) default NULL,

запрос который выводит количество фоток (разрешённых (status)) и по умолчанию имя фотки по дате загрузке самую свежую:

PHP:
select count(id),image from photo where user = $user and status = 2 GROUP BY user;
а мне нужно, чтобы выводил имя фотки у которой flag = 2 т.е. которую пользователь выбрал основной!
Я не очень понимаю работу GROUP, JOIN поэтому прошу помощи или ссылку на аналогичную проблему...

P.S. раньше я просто выводил одним запросом количество, вторым нужную фотку
но подозреваю что в одном запросе будет проще и быстрее...
 

Ashotovich

Новичок
Если flag равен 1 или 2 (*телепат mode on*):

select count(id),image from photo where user = $user and status = 2 GROUP BY user ORDER BY flag DESC
 

Wicked

Новичок
но подозреваю что в одном запросе будет проще и быстрее...
УЖЕ не проще, раз ты пришел с этим вопросом на форум.
Делай двумя запросами, т.к. одним запросом это доставать, конечно, можно... но это будет уже изврат.
 

OnlyRu

Новичок
Ashotovich я пробовал добавить ORDER BY но всё равно выводит фотку которая первая в базе по id


Wicked думаю ты прав... оставим всё как есть
 

OnlyRu

Новичок
да... ставил пробовал и групировать по разному но в других случаях неправильное количество фоток, что и логично в принципе...
 

rusan

Новичок
MySQL одна из не многих БД, которая позволяет в SELECT вставлять выбор полей не указанных в GROUP BY (если он есть), но выбирает при этом не так как ты хочешь, а первую попавшуюся запись. И если тебе надо последнюю, то тут без вложенного запроса или join не обойтись.

PHP:
select count(t1.id), t2.image
from photo t1
INNER JOIN photo t2 ON t2.user = t1.user AND t2.flag = 2
where t1.user = $user and t1.status = 2 GROUP BY t1.user;
 
Сверху