我正在访问一个包含 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>";
试试这个。
$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>";
好吧,在上面对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很好地播放并将数组整齐地格式化为平面数组,而无需中间的循环......?