我正在运行PHP脚本以将池保存到数据库中 我的MySQL看起来像这样
ID QUESTION_1
1 1 or 2 or 3 ( according to the chosen option value in number )
如果我在QUESTION_1投票,我可以投票选项1或2或3,所选值的编号在MySQL中保存为1或2或3
我需要什么
如果大多数人投票选项2让我们说348次,那么人们选择选项3获得208票,第三名获得选项3和87票我需要显示:
Option 2 winner with 348 votes
Option 3 with 208 votes
option 2 with 87 votes
我们展示胜利者和多少票......
我想这样做
$r['total']=0;
foreach(array(1,2,3) as $QUESTION_1){
$res=mysqli_query($datacenter, "SELECT COUNT(QUESTION_1) AS `total`
FROM `votes` WHERE `QUESTION_1` = '$QUESTION_1' ");
$tmp=mysqli_fetch_assoc($res);
$r=max($tmp['total'],$r['total']);
}
echo number_format($r,0,',','.');
但我是PHP的新手,所以欢迎任何帮助
知道怎么做吗?
答案 0 :(得分:1)
你不需要太多的代码,答案很长,因为我试图解释每一件事,但代码很短
正如你在这里看到的那样,人们选择选项2,三次
他们选择选项1,两次
并且他们只选择选项3一次,
所以选项2是赢得3票,选项1是第二名2票,选项3是第三名一票
所以您的显示应该如下所示
选项1获胜者,获得3票
选项2,投票数为2票
选项3,投票数为1票
如果我到现在为止,请进一步阅读,其他明智地附上您的数据库的图片,并提出您的问题,并告诉我,
解决方案 - 您不需要太多代码就可以执行此操作,只需使用下面的代码
$res = mysqli_query($datacenter,"SELECT *, COUNT(QUESTION_1) as total FROM
`votes` GROUP BY QUESTION_1 ORDER BY total DESC");
$declration = ['winner with','with','with'];
$i=0; // you dont need this line, but if you dont need this it will show you
// the index error but your code will work fine
while ($row = mysqli_fetch_assoc($res)) {
echo 'option '.' '. $row['QUESTION_1'].' '.
$declration[$i++].' '. $row['total']. ' '.
'votes<br>';
}
说明 - 首次查询解释
SELECT *, COUNT(QUESTION_1) as total FROM `votes` GROUP BY QUESTION_1 ORDER BY total DESC
什么查询只是简单地说选择每个事物而不是重复它的计数数问题_1,并按重复值的数量对它们进行排序,最后我说按总DESC排序它们,如果我不订购它们,它很好,但我必须对结果进行排序,这就是我现在订购它们的原因。
因为你可以很好地对我们的结果进行排序,所以现在我们必须考虑我们的显示消息。
我正在使用数组来显示结果
显示结果,而不是明白地键入它我正在使用数组,declration
$declration = ['winner with','with','with'];
我使用数组的原因,因为它使我的工作更容易,因为你可以看到第一个值是winner with
,而不是第二个with
,第三个是with
,尝试改变第二个和第三个值,有些东西比如亚军或第三个,你的显示也会改变。
现在提取并显示
echo 'option '.' '. $row['QUESTION_1'].' '. $declration[$i++].' '. $row['total']. ' '. 'votes<br>';
我正在使用
创建另一个空间,如果您不明白,其他人将会理解,此部分正在执行的操作$declration[$i++],
更改原始$declration
中的值数组,你将能够理解,
并且此消息非常重要,您的代码可以通过sql注入,请进行研究或观看视频,
任何困惑让我知道