PHP从数据库取出数组后如何判断一列同数值的个数??
我把调查问卷的答案都存在数据库里,如果每次搜索条件用count的话那10道题4个选项就要用40次条件(实际不止10道),有没有办法一次性select后,用什么函数判断某列...
我把调查问卷的答案都存在数据库里,如果每次搜索条件用count的话那10道题4个选项就要用40次条件(实际不止10道),有没有办法一次性select后,用什么函数判断某列的数值?比如第一题选择A的有多少个,选择B的有多少个。。。
展开
5个回答
2012-11-15 · 知道合伙人软件行家
关注
展开全部
假设数据库结构如下
问卷表 wid
问题表 qid wid(属于哪个问卷) question
答案表 aid qid(属于哪个问题) answer
$sql='SELECT `wid` FROM `问卷表`';
$res = mysql_query($sql);
while($row = mysql_fetch_array($res)){
$sql='SELECT `qid` FROM `问题表` WHERE wid='".$row['wid']."''; //选出该问卷的所有问题
$res2 = mysql_query($sql);
while($row2 = mysql_fetch_array($res2)){
$sql='SELECT `answer` FROM `答案表` WHERE qid='".$row2['qid']."''; //选出该问题的所有答案
$res3 = mysql_query($sql);
while($row3 = mysql_fetch_array($res3)){
switch($row3['answer']){
case 'A':
$answerA.$row2['qid'] = $answerA.$row2['qid'] + 1;
break;
case 'B':
$answerB.$row2['qid'] = $answerA.$row2['qid'] + 1;
break;
case 'C':
$answerC.$row2['qid'] = $answerA.$row2['qid'] + 1;
break;
case 'D':
$answerD.$row2['qid'] = $answerA.$row2['qid'] + 1;
break;
}
}
echo '问题'.$row2['qid'] .'统计:<br/>';
echo 'A'.$answerA.$row2['qid'].' B'.$answerB.$row2['qid'].' C'.$answerC.$row2['qid'].' D'.$answerD.$row2['qid'].'<br/>';
}
}
}
想用sql一次性查出来,是很困难的,在下才疏学浅,只能用本办法了
问卷表 wid
问题表 qid wid(属于哪个问卷) question
答案表 aid qid(属于哪个问题) answer
$sql='SELECT `wid` FROM `问卷表`';
$res = mysql_query($sql);
while($row = mysql_fetch_array($res)){
$sql='SELECT `qid` FROM `问题表` WHERE wid='".$row['wid']."''; //选出该问卷的所有问题
$res2 = mysql_query($sql);
while($row2 = mysql_fetch_array($res2)){
$sql='SELECT `answer` FROM `答案表` WHERE qid='".$row2['qid']."''; //选出该问题的所有答案
$res3 = mysql_query($sql);
while($row3 = mysql_fetch_array($res3)){
switch($row3['answer']){
case 'A':
$answerA.$row2['qid'] = $answerA.$row2['qid'] + 1;
break;
case 'B':
$answerB.$row2['qid'] = $answerA.$row2['qid'] + 1;
break;
case 'C':
$answerC.$row2['qid'] = $answerA.$row2['qid'] + 1;
break;
case 'D':
$answerD.$row2['qid'] = $answerA.$row2['qid'] + 1;
break;
}
}
echo '问题'.$row2['qid'] .'统计:<br/>';
echo 'A'.$answerA.$row2['qid'].' B'.$answerB.$row2['qid'].' C'.$answerC.$row2['qid'].' D'.$answerD.$row2['qid'].'<br/>';
}
}
}
想用sql一次性查出来,是很困难的,在下才疏学浅,只能用本办法了
2012-11-14 · 知道合伙人软件行家
关注
展开全部
不太清楚你的意思。
据我以前编写类似在线考试的东东,像你描述中的可以当作是多项选择(或单项选择)题型,那么,数据库里可以设计有4个字段:
1. 问题ID
2. 问题标题
3. 选项A B C D (这个可以放在一个字段里,也可以分开成4个字段来放)
4. 问题答案
当用户选择提交答案后,直接比较与问题答案是否相符就可以了。
据我以前编写类似在线考试的东东,像你描述中的可以当作是多项选择(或单项选择)题型,那么,数据库里可以设计有4个字段:
1. 问题ID
2. 问题标题
3. 选项A B C D (这个可以放在一个字段里,也可以分开成4个字段来放)
4. 问题答案
当用户选择提交答案后,直接比较与问题答案是否相符就可以了。
追问
完全不是这个意思。。。不是提交比较,是取个数。例如第一题判断选A B C D各有多少个,就要select 4次
如何减少条件判断,提高效率
追答
如果你指的是得到 每道题 答 A、B、C、D 的人数,貌似只能依次判断。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已经解析成数组后 ,这个要靠foreach 遍历后
判断
$sum=0;
foreach($arr as $key =>$val){ //$arr你的数组
if($val['user_num'] ==1)// $val['user_num']你要判断的字段
$sum +=1;
}
echo $sum;//你要的值的个数
判断
$sum=0;
foreach($arr as $key =>$val){ //$arr你的数组
if($val['user_num'] ==1)// $val['user_num']你要判断的字段
$sum +=1;
}
echo $sum;//你要的值的个数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select count(1) from 数据库名 group by 选项
这样得到的数组就是四种选项分别有多少个的二维数组
这样得到的数组就是四种选项分别有多少个的二维数组
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用group_concat(answer).
根据题目分组 group by title .将题目的答案 链接成字符串。
得到每一个题目所有的答案。在PHP中用正则得出每个题目中每个答案出现的个数。
根据题目分组 group by title .将题目的答案 链接成字符串。
得到每一个题目所有的答案。在PHP中用正则得出每个题目中每个答案出现的个数。
更多追问追答
追问
那10道题也要做10次,然后正则也是4次,这还不如直接count方便啊。。。
追答
那就聚合题目ID,以答案为A B C D 来聚合。
这种做法 能减少SQL 的请求次数。 当题目数量变大的时候。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询