【问题标题】:PHP MySQL pool show highest voted and votesPHP MySQL 池显示最高票数和票数
【发布时间】:2017-04-22 21:40:02
【问题描述】:

我正在运行一个 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 次,第二名的人以 208 票选择选项 3,第三名是选项 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 新手,所以欢迎任何帮助

知道怎么做吗?

【问题讨论】:

  • 看起来像是家庭作业。你上什么课?用简单的英语(不是代码)你认为你应该如何继续。分步布置。有些地方你的问题没有意义?查看echo 代码 sn-p。选项 #1 发生了什么?为什么选项 #2 列出了两次?
  • 显示你的表格结构和你想要达到的目标。
  • 我编辑了问题,现在很容易理解了
  • 您可以做的,是在有人投票时向问题 1 列添加一个,而不是您可以运行选择查询,并通过投票 ASC 对它们进行排序,您在这里尝试如何做,正在制作一个简单的工作复杂,如果你不明白我想说什么,让我知道,我会把它作为解决方案发布,但是当你告诉我发布解决方案时,也试着告诉你不明白的地方,mysqli 不会自动保护您的代码,我创建的视频是为了了解为什么您的代码是 vunrable,youtube.com/watch?v=LgogIRji28U
  • ARIF_SUHAIL 事实是我不明白,我是 PHP 新手。您能写一个解决方案,以便我也可以选择它作为正确答案吗

标签: php html css mysql forms


【解决方案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

什么查询只是说选择每件事,然后计算自己重复的数字 question_1,然后按重复值的数量对它们进行排序,最后我说的是按总 DESC 对它们进行排序,如果我不订购它们,很好,但是我必须对结果进行排序,所以这就是我现在订购它们的原因。

如果您在本地主机中运行此查询,您将得到如下结果

如您所愿,我们的结果已经很好地排序了,所以现在只需要考虑我们必须处理我们的显示消息。

我正在使用数组来显示结果

显示结果,而不是直接输入,我使用的是数组 declration

$declration = ['winner with','with','with'];

我使用数组的原因,因为它使我的工作更轻松,如您所见,第一个值是winner with,第二个是with,第三个也是with,尝试更改第二个和第三个价值,比如亚军或第三名,你的展示也会改变。

现在是抓取和展示

echo 'option '.' &nbsp;&nbsp; '. $row['QUESTION_1'].' &nbsp;&nbsp; '. $declration[$i++].' &nbsp;&nbsp; '. $row['total']. ' &nbsp;&nbsp; '. 'votes<br>';

我使用&amp;nbsp;只是为了创建另一个空间,其他人会明白,如果你不明白,这部分在做什么$declration[$i++],改变我们原来的$declration数组中的值,你就可以了理解,

而且这条信息很重要,你的代码是易受sql注入的,请重新搜索或观看视频,

如有任何困惑,请告诉我

【讨论】:

  • 非常详尽完美的答案
猜你喜欢
  • 2021-12-09
  • 2022-08-05
  • 1970-01-01
  • 1970-01-01
  • 2022-11-07
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多