2013-05-21 30 views
6

你好我嘗試學習SQL約數,但我不能甚而計算價值有多少次是在一個特定的列計數SQL語法COUNT(值)多列

我的數據庫結構是這樣的。 (表:自然)

ID | one | two | three | 

1 | 34 | 45 | 80 | 
2 | 41 | 34 | 7 | 
3 | 7 | 18 | 22 | 
4 | 8 | 7 | 45 | 

我試着這樣

$result=mysql_query("SELECT COUNT(one) AS total FROM natural 
WHERE one=7")or die("Error: ".mysql_error()); 
$data=mysql_fetch_assoc($result); 
echo $data['total']; 

但即使在數只有1列,我不能得到的結果..

我需要的是指望有多少次是所有列中的「值」(例如7)

類似於本示例中的值7 = 3總計(多列)

我怎樣才能讓這樣的SQL。

編輯:嘗試這(哪裏是我的語法問題?)

$result=mysql_query("SELECT COUNT(DISTINCT id) TotalCount FROM tblname WHERE 7 IN (one, two, three)")or die("Error: ".mysql_error()); 
$data=mysql_fetch_assoc($result); 
echo $data['TotalCount']; 

我吸了,謝謝您的回答,但我認爲我的問題是用的mysql_query()因爲我始終有一個語法問題,用你所有的答案和它顯然是我的。

$result=mysql_query("SELECT (SUM(CASE WHEN one = 7 THEN 1 ELSE 0 END) + 
     SUM(CASE WHEN two = 7 THEN 1 ELSE 0 END) + 
     SUM(CASE WHEN three = 7 THEN 1 ELSE 0 END)) TotalCount 
    FROM natural")or die("Error: ".mysql_error()); 
$data=mysql_fetch_assoc($result); 
echo $data['TotalCount']; 

爲了解決這個問題最後的代碼,只需使用onetwo ...等等,這就是natural正確的語法:d

+0

只是一個音符。 'mysql_query'被刪除。學習mysqli或PDO。 – itachi

回答

7

這個人會給你正確的答案,即使值跨列重複

SELECT (SUM(CASE WHEN one = 7 THEN 1 ELSE 0 END) + 
     SUM(CASE WHEN two = 7 THEN 1 ELSE 0 END) + 
     SUM(CASE WHEN three = 7 THEN 1 ELSE 0 END)) TotalCount 
    FROM table1 

SQLFiddle

如果你有以下數據

| ID | ONE | TWO | THREE | 
-------------------------- 
| 1 | 34 | 45 | 80 | 
| 2 | 41 | 7 |  7 | 
| 3 | 7 | 18 | 22 | 
| 4 | 7 | 7 | 45 | 

輸出將被

| TOTALCOUNT | 
-------------- 
|   5 | 
+0

謝謝!!!!在構建mysql_query()時,我有一個語法問題,請參閱我的編輯。並對不起,我知道我吸 –

+0

@JulesMartinez不客氣:)。 'NATURAL'是MySql中的[保留字](https://dev.mysql.com/doc/refman/5.5/en/reserved-words.html)。因此,如果你用保留名稱命名你的表或列(我不建議這樣做),你總是需要分別在表或列名周圍使用反引號'''。 – peterm

+0

是的,我試着'自然'「@查詢結束,但語法問題接近自然遺蹟。哦SORRY !!!反向''謝謝!! –