2012-10-13 159 views
1

我在我的MYSQL數據庫中有不同的表,我需要創建一個SELECT查詢,在選擇一行之前檢查某些值。複雜的MYSQL選擇

它基本上是3表(新聞,標籤和news_tags)。

  1. 新聞包含有關新聞的信息。
  2. 標籤標籤信息。
  3. news_tags存儲新聞使用哪個標籤。

這裏有我的3個不同的表(簡化當然)

舉例說明:

消息:

id | status 
1 | 1 
2 | 1 
3 | 0 

標籤:

tag_id | tag_name 
1  | name 1 
2  | name 2 

news_tags:

id | news_id | tag_id 
1 | 1  | 1 
2 | 1  | 2 
3 | 2  | 1 
4 | 3  | 1 
5 | 3  | 2 

現在,首先我想知道有多少次正在使用的每個標籤。 所以我想出了這個查詢

SELECT tags.tag_name, news_tags.tag_id, COUNT(*) as count 
FROM news_tags 
LEFT JOIN tags 
ON tags.tag_id = news_tags.tag_id 
GROUP BY news_tags.tag_id 
ORDER BY count DESC 

這給我下面的輸出

tag_name | count 
name 1 | 3 
name 2 | 2 

現在我的問題是,我不想指望那些在news.status = 0; 所以,如果我們看看我的例子,在news表中id = 3的行有status = 0count不應該生效news_tags表中的news_id = 3

基本上所需的輸出應該是

tag_name | count 
name 1 | 2 
name 2 | 1 

謝謝您的幫助。

+0

能否請您提供'CREATE'和'INSERT'語句呢? –

回答

3

您需要news表加入它,就可以查詢status

SELECT tags.tag_name, news_tags.tag_id, COUNT(*) as count 
FROM news_tags 
     LEFT JOIN tags 
      ON tags.tag_id = news_tags.tag_id 
     LEFT JOIN news 
      ON news.id = news_tags.news_id 
WHERE news.status = 1 
GROUP BY news_tags.tag_id 
ORDER BY count DESC 
+0

天才!謝謝!一旦我讓我接受答案! –

+0

FWIW:應該是news.status = 1 –

+0

@ComputerArts是的,我的不好。 –