Tenho uma tabela de postagens conforme abaixo:
CREATE TABLE `post` (
`p_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`user_id` smallint(5) unsigned NOT NULL,
`cat_id` tinyint(3) unsigned NOT NULL,
`view_count` smallint(5) unsigned NOT NULL DEFAULT '0',
`status` tinyint(3) unsigned NOT NULL,
`abstract` text CHARACTER SET ucs2 COLLATE ucs2_persian_ci NOT NULL,
`content` text CHARACTER SET ucs2 COLLATE ucs2_persian_ci NOT NULL,
`title` varchar(50) CHARACTER SET ucs2 COLLATE ucs2_persian_ci NOT NULL DEFAULT '',
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`meta_description` tinytext CHARACTER SET ucs2 COLLATE ucs2_persian_ci NOT NULL,
`picture` varchar(100) NOT NULL,
PRIMARY KEY (`p_id`),
KEY `user_id` (`user_id`),
KEY `date` (`date`),
KEY `pic_id` (`picture`),
KEY `cat_id` (`cat_id`),
CONSTRAINT `post_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `karbar` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `post_ibfk_3` FOREIGN KEY (`cat_id`) REFERENCES `category` (`cat_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1
E eu tenho uma tabela de comentários como abaixo:
CREATE TABLE `comment` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`p_id` smallint(5) unsigned NOT NULL DEFAULT '0',
`name` varchar(50) CHARACTER SET ucs2 COLLATE ucs2_persian_ci NOT NULL DEFAULT '',
`site` varchar(200) CHARACTER SET ucs2 COLLATE ucs2_persian_ci NOT NULL,
`content` text CHARACTER SET ucs2 COLLATE ucs2_persian_ci NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `p_id` (`p_id`),
CONSTRAINT `comment_ibfk_1` FOREIGN KEY (`p_id`) REFERENCES `post` (`p_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
Eu quero obter um post (por exemplo, p_id=8) e todos os seus comentários. Como fazer isso? Como obter contagem (*) da tabela de comentários enquanto obtém seu registro de postagem?
Isso obterá todas as postagens e suas contagens de comentários
Isso obterá postagem para p_id=8 e sua contagem de comentários
Nesse caso, uma função não é necessária porque a consulta aninhada sempre retornará um número, mesmo que o número seja zero. Se você quiser ver a saída de todas as contas, simplesmente remova a
WHERE
cláusula.