2017-04-19 77 views
0
$pdo = $db->query('SELECT * FROM data ;'); 
$total = $pdo->rowCount(); 
echo $total; 

結果是例如3如何在一個數據庫請求中計算不同的mysql行數?

但是我在mySQL數據庫中有一個名爲「done」的列,其中可能的值是10

我現在想要計算值爲1的所有行。所以,如果有,例如在數據庫總9元素和他們三個項目與價值1那麼結果應該是:

3/9

我知道只有知道如何與第二數據庫請求做

$pdo = $db->query('SELECT * FROM data WHERE done = "1" ;'); 
$done = $pdo->rowCount(); 

echo $done."/".$total; 

但我想知道這是否可能只是一個數據庫請求。

+1

小心,'行數()'不是SELECT語句在所有數據庫保持一致 - http://php.net/manual/en/pdostatement.rowcount.php – WillardSolutions

回答

1

MySQL支持的SUM表達式,所以如果你希望得到一個總數,並在過濾計數同一時間,你可以這樣做:

SELECT COUNT(*) as totalCount, SUM(`done`=1) as completeCount FROM `data` 

您還可以添加在「沒有做過」如果需要的話數:

SELECT COUNT(*) as totalCount, SUM(`done`=1) as completeCount, SUM(`done`=0) as incompleteCount FROM `data` 

與您的代碼:

$query = 'SELECT COUNT(*) as total, SUM(`done`=1) as complete FROM `data`'; 
$pdo = $db->query($query); 
$data = $pdo->fetch(); // Uses PDO::FETCH_BOTH by default 
echo $data['complete']."/".$data['total']; 
+0

看起來不錯。我如何執行結果? '$ result = $ pdo-> fetchAll();'然後'foreach($ result as $ row){echo $ row ['totalCount'];}'? – Jarla

+0

我測試過了,但沒有得到結果。我必須在某個地方犯錯。讓我知道如果我解決了它 – Jarla

+0

@Jarla增加了一個例子 – Lee

4

嘗試此查詢,得到的結果信息(未行數)

SELECT `done`, count(*) as `numrows` FROM `data` GROUP BY `done`; 
+0

謝謝。我測試了它。只是不能從那裏到3/9。我得到類似於0101010101 – Jarla

+0

的東西你可能會迴應對象本身,而不是結果。您需要獲取結果。 – WillardSolutions

相關問題