簡體   English   中英

如何計算一個值出現在MySQL列中的次數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM