PHP从数据库取出数组后如何判断一列同数值的个数??

我把调查问卷的答案都存在数据库里,如果每次搜索条件用count的话那10道题4个选项就要用40次条件(实际不止10道),有没有办法一次性select后,用什么函数判断某列... 我把调查问卷的答案都存在数据库里,如果每次搜索条件用count的话那10道题4个选项就要用40次条件(实际不止10道),有没有办法一次性select后,用什么函数判断某列的数值?比如第一题选择A的有多少个,选择B的有多少个。。。 展开
 我来答
xiii130
2012-11-15 · 知道合伙人软件行家
xiii130
知道合伙人软件行家
采纳数:817 获赞数:2867
爱好编程,在工作中积累了比较丰富的经验。愿与大家共同进步。

向TA提问 私信TA
展开全部
假设数据库结构如下
问卷表 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一次性查出来,是很困难的,在下才疏学浅,只能用本办法了
windblast
2012-11-14 · 知道合伙人软件行家
windblast
知道合伙人软件行家
采纳数:5633 获赞数:13623
毕业于空军第一航空学院电子专业,1991年开始接触电脑,从事多年计算机编程,具有较丰富的经验。

向TA提问 私信TA
展开全部
不太清楚你的意思。

据我以前编写类似在线考试的东东,像你描述中的可以当作是多项选择(或单项选择)题型,那么,数据库里可以设计有4个字段:

1. 问题ID
2. 问题标题
3. 选项A B C D (这个可以放在一个字段里,也可以分开成4个字段来放)
4. 问题答案

当用户选择提交答案后,直接比较与问题答案是否相符就可以了。
追问
完全不是这个意思。。。不是提交比较,是取个数。例如第一题判断选A B C D各有多少个,就要select 4次
如何减少条件判断,提高效率
追答
如果你指的是得到 每道题 答 A、B、C、D 的人数,貌似只能依次判断。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
离魔太魔小指曾09
推荐于2016-07-03 · TA获得超过131个赞
知道小有建树答主
回答量:312
采纳率:0%
帮助的人:97.9万
展开全部
已经解析成数组后 ,这个要靠foreach 遍历后
判断
$sum=0;
foreach($arr as $key =>$val){ //$arr你的数组
if($val['user_num'] ==1)// $val['user_num']你要判断的字段
$sum +=1;
}
echo $sum;//你要的值的个数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wanggqqian
2012-11-15
知道答主
回答量:6
采纳率:0%
帮助的人:9413
展开全部
select count(1) from 数据库名 group by 选项
这样得到的数组就是四种选项分别有多少个的二维数组
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
buddyfox
2012-11-15 · TA获得超过122个赞
知道答主
回答量:163
采纳率:100%
帮助的人:176万
展开全部
用group_concat(answer).
根据题目分组 group by title .将题目的答案 链接成字符串。
得到每一个题目所有的答案。在PHP中用正则得出每个题目中每个答案出现的个数。
更多追问追答
追问
那10道题也要做10次,然后正则也是4次,这还不如直接count方便啊。。。
追答
那就聚合题目ID,以答案为A B C D 来聚合。
这种做法 能减少SQL 的请求次数。 当题目数量变大的时候。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式