[sql] create table cms_news( NewsID smallint unsigned not null auto_increment primary key, NewsTitle varchar(90) not null, ... ) engine = InnoDB; create table cms_news_comments( ComID smallint unsigned not null auto_increment primary key, ... NewsID smallint unsigned not null, foreign key(NewsID) references cms_news(NewsID) ) engine = InnoDB; [/sql] тут пропущены строки которые не имеют никогого отношения к вопросу и собственно вопрос: как к выборке например такой(упрощенно, там еще таблицы соеденяються) [sql] select n.NewsID, NewsTitle, count() as CountComments from cms_news as n left join cms_news_comments as com on n.NewsID=com.NewsID; [/sql] сделать так чтобы поле CountComments содержало кол-во комментариев к каждой из статей и возможно ли это? как не фантозировал что-то ничего не выходит...
[sql]SELECT id, name, (SELECT count(*) FROM `comments` WHERE `comments`.pid=`news`.pid) as ncount FROM `news`[/sql] Пробовали?
[sql]SELECT id, name, count(`comment`.id) FROM `news` LEFT JOIN `comment` ON ( ... ) GROUP BY `news`.id[/sql] Может так?
Hawk В моем проекте используется подобная схема, но там все построено на ORM, если верхние посты не помогают, то могу вытащить из проекта SQL
topas SELECT id, name, (SELECT count(*) FROM `comments` WHERE `comments`.pid=`news`.pid) as ncount FROM `news` вот это заработало, но единственное вопрос производительности, насколько это замедлит поиск? просто я думал присоеденить таблицу с комментами а не встраивать подзапрос или в плане производительности это не очень страшно?
Где то на днях попадалось. Подзапрос может гнать и выполняться каждый раз при сканировании основной таблицы . Пофиксят не раньше MySQL 6.0.