簡體   English   中英

從具有3個唯一ID的表中獲取值(冗余SQL查詢)

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

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