2011-08-26 105 views
0

我使用此查詢來選擇所有的文章:Mysql的連接問題

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_id文章表。我試着用COUNT,但是它只返回一個結果。我怎麼用一個查詢來做到這一點?

回答

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 
+0

它的工作原理。非常感謝。 – Nikolay

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 *,並僅選擇,你實際上要使用的字段。這也有助於代碼的可讀性。