2011-08-24 94 views
0

不太清楚如何解決這個問題,因爲我的知識是有限的。MySQL中的where子句加入嗎?

但是 - 我有三張桌子。

類別表。

category_id, category_name 
1   | ABC 
2   | DEF 
3   | GHI 

鏈接表。

link_id, category_id, link_name 
1  | 1   | Bla 
2  | 1   | Bla bla 
3  | 2   | Bla Bla Bla 

一個細節表

details_id, link_id, details_status (then some more irrelevant fields) 
1   | 1  | 0 
2   | 1  | 1 
3   | 1  | 0 
4   | 2  | 1 
5   | 3  | 1 

狀態字段爲0,1或2

我想什麼做的是選擇一個鏈接列表,給定類別。夠簡單。

然後我想要做的是加入詳細信息表,這樣我可以突出顯示我的鏈接,如果找到給定的狀態。

例如,在運行查詢返回類別'ABC'的鏈接列表的情況下,detail_id的1和3屬於狀態0。

我的查詢將返回象的狀態where details_status=0

計數的東西所以對於CATEGORY_ID 1我想獲得: link_id,LINK_NAME,status_count

產量:

1 | bla   | 2 
2 | bla bla  | 0 
3 | bla bla bla | 0 

回答

2
select links.link_id, links.link_name, 
     sum(if(details.details_status=0,1,0)) as status_count 
from links 
inner join category on links.category_id = category.category_id 
inner join details on details.link_id = links.link_id 
where category.category_name = 'ABC' 
group by links.link_id, links.link_name 

IF語句包含3個參數。第一個是被評估的邏輯表達式。第二個是返回值,如果該表達式爲真。第三個是返回值,如果該表達式爲false。所以,在這裏,我們正在檢查detail_status是否爲0.如果是,我們要返回1,否則返回0.然後,我們將它包含在SUM函數中以獲得我們正在查找的總計。

+0

謝謝,這工作!你能解釋這部分嗎,所以我可以完全理解,並希望將來再次使用它,我不確定0,1,0在做什麼。 sum(if(details.details_status = 0,1,0)) – user887515

+0

see edited post –

1

聽起來像類別表與您的問題無關。

實現你的要求的輸出,試試這個:

select l.link_id, link_name, count(d.link_id) 
from links l 
left join details d on d.link_id = l.link_id and details_status = 0 
group by 1, 2; 

的鑰匙,使這項工作是把details_status = 0on條款,where條款。

如果您願意,您可以很容易地將此​​查詢加入到類別表中。