制作数组sql GROUP查询与php数组很好地配合(简单)

时间:2015-03-13 13:07:20

标签: php mysql arrays

我正在访问一个包含500,000行的数据库,每个行都有一个男性(值1)或女性(值2)的列性别。

然而,在尝试让它显示这些数字时,我得到的文字是:“有373名男性和女性。”两个数字都应该超过100,000。

我错过了哪种明显的语法错误?

$query = "SELECT sex, COUNT(*) FROM data GROUP BY sex"; 
$result = mysql_query($query) or die(mysql_error());
$sexdb = mysql_fetch_array($result);
    $totalmale = $sexdb["1"]; 
    $totalfemale = $sexdb["2"];

echo "<p>There were ".$totalmale." males and ".$totalfemale." females.</p>";

2 个答案:

答案 0 :(得分:1)

试试这个..

    $query = "SELECT (select count(sex) from data where sex=1) as maleCount, 
             (select count(sex) from data where sex=2) as femaleCount,
             COUNT(*) FROM data GROUP BY sex"; 
    $result = mysql_query($query) or die(mysql_error());
    $sexdb = mysql_fetch_assoc($result);
    $totalmale = $sexdb["maleCount"]; 
    $totalfemale = $sexdb["femaleCount"];

echo "<p>There were ".$totalmale." males and ".$totalfemale." females.</p>";

答案 1 :(得分:0)

好吧,在上面正确滥用mysql_ *后,我改为PDO。

我的最终代码:

$sexquery = $connection->query("SELECT thesex, COUNT(*) AS sex FROM data GROUP BY thesex");
$sexdb = $sexquery->fetchAll(PDO::FETCH_ASSOC);

$results = array();          
foreach($sexdb as $row) {
   $results[$row['thesex']] = $row['sex'];
}

var_dump($results);

这给出了一个很好的干净数组,索引是行值,计数是相应的值。如果有更多的值,这将很好地扩展。

array(2) {
  [1]=>
  string(4) "3668"
  [2]=>
  string(4) "1947"
}

我唯一的问题是有没有办法让PDO很好地播放并将数组整齐地格式化为平面数组而不需要中间的循环......?