[英]Get value from table with 3 unique ID's (redundant sql query)
$query = "SELECT COUNT(id) FROM complaint WHERE ID_complntCategory = ?";
$complntCategory = $database->prepare($query);
try {
$complntCategory->execute(array());
$complntCategory->setFetchMode(PDO::FETCH_ASSOC);
foreach ($complntCategory as $key) {
$totaalM = $key['1'];
$totaalV = $key['2'];
$totaalG = $key['3'];
}
}
catch(PDOException $e) {
echo "Error";
}
在上面,您可以看到我的PHP代碼,這是我想做的事情:
我正在嘗試將表“ complaint”中的行數轉換為3個不同的變量(totaalM,totaalV和totaalG)。 totaalM變量應包含“ WHERE ID_complntCategory = 1”的行數。
對於其他變量,“ ID_complntCategory”應為2和3(“ ID_complntCategory”為1、2或3)
應該有一種方法,我不必編寫3個查詢,對嗎?
我顯然以錯誤的方式處理此問題,並且不確定如何解決此問題...
您嘗試執行的操作稱為將pivot
行轉換為列,但是MySQL沒有像其他RDBMS那樣具有數據透視表運算符,但是您可以在一個查詢中使用以下case表達式:
SELECT
SUM(CASE WHEN ID_complntCategory = 1 THEN 1 ELSE 0 END) AS totaalM,
SUM(CASE WHEN ID_complntCategory = 2 THEN 1 ELSE 0 END) AS totaalV,
SUM(CASE WHEN ID_complntCategory = 3 THEN 1 ELSE 0 END) AS totaalG,
COUNT(Id) AS Total
FROM complaint;
或者您可以像這樣將其縮短:
SELECT
SUM(ID_complntCategory = 1) AS totaalM,
SUM(ID_complntCategory = 2) AS totaalV,
SUM(ID_complntCategory = 3) AS totaalG,
COUNT(Id) AS Total
FROM complaint;
這會給你這樣的東西:
| totaalM | totaalV | totaalG | Total |
|---------|---------|---------|-------|
| 2 | 3 | 1 | 7 |
在這里,您需要一些魔術,涉及特殊的SQL和PDO功能。
首先,您需要一個SQL查詢,通過一個查詢即可提供所需的結果。 為了獲得這一點,您需要一個GROUP BY運算符:
SELECT ID_complntCategory, count(*) FROM complaint GROUP BY ID_complntCategory
它將為您提供按ID_complntCategory划分的計數。
接下來,您可以使用PDO的一項宏偉功能PDO :: FETCH_KEY_PAIR提取模式,這將為您提供一個數組,其中鍵為類別ID,值為count
$sql = "SELECT ID_complntCategory, count(*) FROM complaint GROUP BY ID_complntCategory";
$stmt = $database->prepare($sql);
$key = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
$totaalM = $key['1'];
$totaalV = $key['2'];
$totaalG = $key['3'];
請注意,永遠不要只說“錯誤”而捕獲PDO錯誤。 讓PHP錯誤報告來代替它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.