SQL:从表中选择列并比较+计数

时间:2012-11-13 04:33:51

标签: php mysql sql

我正在改进我的php脚本,它有两个简单的SQL查询。我想要做的是将两个查询合并为一个。

第一次查询:

SELECT categories.*, entries.* 
FROM categories, entries 
WHERE entries.cat_id = categories.cat_id 
ORDER BY dateposted ASC 
LIMIT 5;

第二次查询:

SELECT comments.* 
FROM comments 
WHERE comments.entry_id = '. $row['id'].';

这两个在分开时效果很好。我只需要将它们合并为一个(仍然很简单,请不要UNION或INNER JOIN),并且可能在查询中计算特定条目的许多注释。 此外,我的“评论”表有五列(comment_id,post_id,作者,正文,日期发布),如果有任何帮助可以知道。

我尝试了不同的方法。像这样:

SELECT categories.*, entries.*, COUNT(comments.entry_id) AS comm_num 
FROM categories, entries, comments 
WHERE entries.cat_id = categories.cat_id 
AND comments.entry_id = entries.id 
ORDER BY dateposted ASC LIMIT 5;

没有用......

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您的第一个查询本质上是一个连接,它可能不会更快。您可以查询条目(显示相应的类别信息时),如下所示:

SELECT entries.*, categories.* 
FROM entries
LEFT JOIN categories ON entries.cat_id = categories.cat_id 
ORDER BY dateposted ASC 
LIMIT 5;

此外,听起来您实际上并不希望返回此查询中的每个注释行,而只是获取每个“条目”的注释计数。为此,您可以这样做:

SELECT entries.*, categories.*, COUNT(comments.comment_id) AS comm_num  
FROM entries
LEFT JOIN categories on entries.cat_id = categories.cat_id
LEFT JOIN comments on comments.entry_id = entries.entry_id
GROUP BY entries.entry_id
ORDER BY dateposted ASC 
LIMIT 5;

请注意,COUNT函数正在计算注释ID,而不是条目ID。