[英]How do I count how many times a value appears in a MySQL column?
我有一個名為Reports的MySQL表,並且其中有一個名為Status的列。 可以將其設置為“打開”,“待處理”或“關閉”。 我需要能夠統計分別設置為“打開”,“關閉”和“待處理”的報告數量。 我還需要將這些數字放入單獨的變量中,以用於圖形中。
我在網站上使用PDO,可以輕松地添加,編輯和檢索數據,但是我終生無法正常工作。 我發現PDO非常令人困惑且難以學習,因為在我可以在線找到的所有示例中,每個人似乎都使用完全不同的格式,語法和變量名。 我不知道我是否在正確的軌道上。 到目前為止,這是我想出的。
try {
$DBH = new PDO("mysql:host=localhost;dbname=$dbname",$dbuser,$dbpass);
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$STH = $DBH->prepare("SELECT status, COUNT(*) FROM reports GROUP BY status");
$result = $STH->fetch();
}
catch(PDOException $e) {
echo $e->getMessage();
}
我沒有任何錯誤或任何東西。 我什至該如何解決?
作為一項附加功能,我希望僅能夠計算在某些日期之間提交的條目的值。 我的數據庫中已經有一個日期列。
我在正確的軌道上嗎? 完全關閉? 我可以使用直接的MySQL查詢使此工作正常進行,但不能使用PDO。
我認為您錯過了execute()
命令? 您可能還想使用fetchAll
而不是fetch
來獲取所有內容。
try {
$DBH = new PDO("mysql:host=localhost;dbname=$dbname",$dbuser,$dbpass);
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$STH = $DBH->prepare("SELECT status, COUNT(*) AS count FROM reports WHERE date_field BETWEEN :start_date AND :end_date GROUP BY status");
$STH->execute(array(':start_date' => $start_date_variable, ':end_date' => $end_date_variable));
$rows = $STH->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
echo $row['status'] . " = " . $row['count'];
}
}catch(PDOException $e) {
echo $e->getMessage();
}
認為您當前實際上不是在運行查詢嗎? 一段時間沒有使用PDO,所以可能是錯誤的,但是請嘗試一下。
您需要一些達到此目的的東西:
SELECT sum(
IF (
COALESCE (status, '') = 'Open',
1,
0
)
) AS total_open,
sum(
IF (
COALESCE (status, '') = 'Closed',
1,
0
)
) AS total_closed,
sum(
IF (
COALESCE(status, '') = 'Pending ',
1,
0
)
) AS total_pending
FROM reports
這應該為您提供可用於圖形的3個不同列中的每個列的總數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.