2016-05-03 82 views
0

我有一個名爲「猜測」的表格,用於存儲人們猜測嬰兒是男孩還是女孩。這些是兩種可能的東西,在「性別」欄(即「男孩」或「女孩)。爲什麼COUNT(CASE WHEN ...)看起來停止了完整的MYSQL查詢檢索?

有4個猜測在表中該poolid。所以,如果我運行下面這段代碼...

$sql = "SELECT 
    FROM guesses 
    WHERE poolid = '$poolid' 
    ORDER BY $sort, createddate"; 
     $getguesses = mysqli_query($connection, $sql); 
     if (!$getguesses) { 
     die("Database query failed: " . mysqli_error($connection)); 
     } else { 
      //Get total number of guesses 
      $numguesses=mysqli_num_rows($getguesses); 
      echo "NUMGUESSES: $numguesses"; 
       while ($row = mysqli_fetch_array($getguesses)) { 
//code to grab other info about guesses, not relevant, works fine 
       } 
     } 

它輸出

NUMGUESSES: 4 

而且還吐出了4條線(每個猜測)和其它信息是不相關的。

我想的女孩猜測VS算總數男孩猜測,f或稍後在餅圖中使用。所以我做了以下...

$sql = "SELECT *, COUNT(CASE WHEN `sex` = 'girl' then 1 ELSE NULL END) as 'totalgirls', COUNT(CASE WHEN `sex` = 'boy' then 1 ELSE NULL END) as 'totalboys' 
    FROM guesses 
    WHERE poolid = '$poolid' 
    ORDER BY $sort, createddate"; 
     $getguesses = mysqli_query($connection, $sql); 
     if (!$getguesses) { 
     die("Database query failed: " . mysqli_error($connection)); 
     } else { 
      //Get total number of guesses 
      $numguesses=mysqli_num_rows($getguesses); 
      echo "NUMGUESSES: $numguesses"; 
       while ($row = mysqli_fetch_array($getguesses)) { 
         echo "GIRLS:". $row['totalgirls']; 
         echo "BOYS:". $row['totalboys']; 
       //code to grab other info about guesses, not relevant 
       } 
     } 

此輸出

NUMGUESSES: 1 
GIRLS: 4 
BOYS: 0 

而且還吐出來只有一條線(僅適用於現有的四個猜測之一)

所有四種猜測是女生,所以GIRLS總數和BOYS總數都是正確的。但爲什麼現在只能將NUMGUESSES視爲1?它應該是4並且應該顯示4行猜測。

與COUNT()的東西扔東西了。有任何想法嗎?

回答

1

你要求mysql計數,所以它輸出一行; ) 試試這個:

$sql = "SELECT COUNT(*), SUM(CASE WHEN `sex` = 'girl' then 1 ELSE 0 END) as..... 

當心包括計數NULL值的!

+0

謝謝,不幸的是,沒有工作,只輸出NUMGUESSES:1,GIRLS:4,BOYS:4並且只有一行再次 – user3304303

+0

變量$ numguesses計數記錄集中的行數,它將始終爲1!並且,由於你正在執行COUNT,因此只有一行是預期的......其他行將包含什麼內容? – Webomatik

+0

對不起,我不明白你爲什麼說它總是1.當你在查詢中使用COUNT時,結果總是1行,不管是什麼?那麼,我會被迫做兩個單獨的SQL查詢(1,獲取所有信息的行數和1的數量)?我真的認爲你可以在同一個查詢中完成它們,但我一定是錯的。 – user3304303