Mysql加入问题

时间:2011-08-26 11:08:11

标签: mysql sql join

我使用此查询选择所有文章:

SELECT articles.*,categories.category_name,users.username,tags.tag 
FROM articles 
LEFT JOIN `categories` ON articles.category_id = categories.category_id 
LEFT JOIN `users` ON articles.author_id = users.user_id 
LEFT JOIN `tags` ON articles.article_id = tags.article_id 
ORDER BY articles.date_added DESC

我有另一个表comments,我想计算有多少条评论,其中article_id在article表中= article_id。我尝试了COUNT,但它只返回一个结果。我怎么能用一个查询呢?

2 个答案:

答案 0 :(得分:1)

您可以在SELECT子句中使用子查询:

SELECT articles.*,categories.category_name,users.username,tags.tag, (SELECT count(*) FROM comments c WHERE c.article_id = articles.article_id) as comments_count

答案 1 :(得分:0)

正如arnaud576875所述,您可以使用子查询来提取摘要数据。

我从你的SQL中注意到的两件事并不是问题的一部分,但值得指出。

  • 您可以使用表别名来缩短SQL并使其更具可读性。

所以而不是

SELECT articles.*,categories.category_name,users.username,tags.tag 
FROM articles 
LEFT JOIN `categories` ON articles.category_id = categories.category_id 
LEFT JOIN `users` ON articles.author_id = users.user_id 
LEFT JOIN `tags` ON articles.article_id = tags.article_id 
ORDER BY articles.date_added DESC

你的代码

SELECT a.*, c.category_name, u.username, t.tag 
FROM articles a
LEFT JOIN `categories` c ON a.category_id = c.category_id 
LEFT JOIN `users` u ON a.author_id = u.user_id 
LEFT JOIN `tags` t ON a.article_id = t.article_id 
ORDER BY a.date_added DESC
  • 我会删除SELECT *并仅选择您实际要使用的字段。这也有助于提高代码的可读性。