【发布时间】:2011-11-22 22:27:58
【问题描述】:
我正在从 MySQL 数据库中检索数据并从中创建报告。当满足某些条件时,我需要获取计数,并且由于 db 查询相当昂贵(而且我将有很多流量),我循环遍历单个查询的结果以增加计数器。
似乎它正在工作(计数器正在递增)并且结果有点接近,但计数器不正确。
目前,表中有 411 条记录,但我从 ['total'] 计数器中获得了像 934 这样的数字,从 ['males'] 获得了像 927 这样的数字,这绝对不可能。但是,我从['females'] 得到 4,这是正确的……
我很确定昨晚它工作正常,但现在不行了——我很困惑。 (仍然只有 411 条记录)
$surveydata = mysql_query("SELECT `age`,`e_part`,`gender` FROM $db_surveydata;") or die(mysql_error());
$rowcount = mysql_num_rows($surveydata);
$age=array('18+'=>0,'<18'=>0,'total'=>0);
$e_part=array('yes'=>0,'no'=>0,'total'=>0);
$genders=array('male'=>0,'female'=>0,'trans'=>0,'don\'t know'=>0,'total'=>0);
while ($responses = mysql_fetch_assoc($surveydata)) {
foreach ($responses as $response){
switch ($response){
case $responses['age']:
if ($responses['age'] > 18) {$age['18+']++;$age['total']++;}
// i tried putting the ['total'] incrementer in the if/else
// just in case, but same result
else {$age['<18']++;$age['total']++;}
break;
case $responses['e_part']:
if ($responses['e_part']) {$e_part['yes']++;}
else {$e_part['no']++;}
$e_part['total']++;
break;
case $responses['gender']:
switch ($responses['gender']){
case 1:$genders['male']++;break;
case 2:$genders['female']++;break;
case 3:$genders['trans']++;break;
case 9:$genders['don\'t know']++;break;
default:break;
}
$genders['total']++;
break;
default:break;
} // end switch
} //end for
} // end while
谢谢!
【问题讨论】:
-
尝试在代码中插入一些调试语句,以缩小问题范围。
标签: php mysql loops switch-statement associative-array