2016-05-03 22 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