我正在访问一个包含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>";
答案 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很好地播放并将数组整齐地格式化为平面数组而不需要中间的循环......?