如何从表中检索票数最高的候选人姓名[关闭]
Posted
技术标签:
【中文标题】如何从表中检索票数最高的候选人姓名[关闭]【英文标题】:How to retrieve the highest voted candidate name with number of votes from table [closed] 【发布时间】:2017-04-04 00:12:12 【问题描述】:这是我的网页 php 代码。我想检索候选人的姓名和票数。但我不知道该怎么做。如您所见,我尝试了很多但没有用。我的数据库名称是选举,我的表名称是投票。在表中,我有 3 列 id、name、votes,并且只插入了三个候选人(不超过那个)。
<html>
<head>
<title>RESULT</title>
<script type="text/javascript" src="http://localhost/WTL/js/validateLogin.js">
</script>
<style type="text/css">
.btn
border-radius:15px;
border:solid 2px #B22222;
padding:5px;
width:10%;
height:8%;
background-color:white;
float:center;
</style>
</head>
<body>
<div class="header">
<img src="http://localhost/WTL/images/home2.jpg" id="home" >
</div>
<div name="header2">
<form name="result" method="post" action="">
<Table class="tabb" align="center" >
<th>
<font size="5px" color="#B22222">RESULT</font>
</th>
<tr><td><input type="textarea" rows="6" cols="50" name="resultDisplay" placeholder="click result to check the result" class="textarea"></td></tr>
</table>
<center><div name="header3" class="last"><input type="submit" name="sub" value="RESULT" onclick="validate();" class="btn" ></div></center>
</form>
</div>
</body>
</html>
<?php
session_start();
$display= "";
if(isset($_REQUEST['sub']))
$db = mysqli_connect("localhost","root","","election");
if($db->connect_error)
die("connection failed".$db->connect_error);
else
$sql="SELECT name,votes FROM cr
WHERE votes = (SELECT Max(votes) FROM cr)";
$res=mysqli_query($db,$sql);
//$name=$res['name'];
//$votes=$res['votes'];
echo '<textarea>', $res , '</textarea>';
//$display .= '<div>'.$name.' '.$votes.'</div>';
?>
【问题讨论】:
“救命!紧急” - 哦,我明白了。顺便说一句,您不能使用$res
查询的“回声”。
你为什么不按票数降序排列,限制为 1? SELECT name,votes FROM cr ORDER BY votes DESC LIMIT 1
- 更清楚一点。
您需要“循环”成功的结果。你不能只是echo $res
那样。您需要while
或foreach
。这一切都在这个php.net/manual/en/mysqli.query.php的手册中,网上也有很多教程。
你也很有可能在标题之前输出 session_start();
的位置 - 这应该高于输出,错误报告会触发标题发送警告 php.net/manual/en/function.error-reporting.php - 如果你不是分配任何会话数组,然后您可以安全地删除它。
<input type="textarea"
这也是无效的。您的代码包含太多错误。这个JS函数又在哪里validate()
?
【参考方案1】:
您的 sql 语法有错误。你的代码应该是这样的:
<html>
<head>
<title>RESULT</title>
<script type="text/javascript" src="http://localhost/WTL/js/validateLogin.js">
</script>
<style type="text/css">
.btn
border-radius:15px;
border:solid 2px #B22222;
padding:5px;
width:10%;
height:8%;
background-color:white;
float:center;
</style>
</head>
<body>
<div class="header">
<img src="http://localhost/WTL/images/home2.jpg" id="home" >
</div>
<div name="header2">
<form name="result" method="post" action="">
<Table class="tabb" align="center" >
<th>
<font size="5px" color="#B22222">RESULT</font>
</th>
<tr><td><input type="textarea" rows="6" cols="50" name="resultDisplay" placeholder="click result to check the result" class="textarea"></td></tr>
</table>
<center><div name="header3" class="last"><input type="submit" name="sub" value="RESULT" onclick="validate();" class="btn" ></div></center>
</form>
</div>
</body>
</html>
<?php
$display= "";
if(isset($_REQUEST['sub']))
$db = mysqli_connect("localhost","root","","election");
if($db->connect_error)
die("connection failed".$db->connect_error);
else
$sql="SELECT name, Max(votes) as vote FROM cr group by name";
$res=mysqli_query($db,$sql);
//$name=$res['name'];
//$votes=$res['votes'];
echo '<textarea>'.$res['name'].' - '.$res['vote'].'</textarea>';
//$display .= '<div>'.$name.' '.$votes.'</div>';
?>
【讨论】:
它说Cannot use of type mysqli_result as array in blah blah ... 他的 SQL 不是问题。您的示例不起作用,因为mysqli_query()
不返回数组...
得到了输出...$sql="SELECT name,votes FROM cr WHERE votes = (SELECT Max(votes) FROM cr)"; $res=mysqli_query($db,$sql); while ($row = mysqli_fetch_array($res)) echo '';回声''。 $row['votes'] .''; 【参考方案2】:
原始问题包含许多错误,这些错误大多似乎由 cmets 对问题和其他答案进行了区分,此响应仅限于与结果显示相关的部分代码
为了得到结果,你应该使用一个循环(假设你没有错误)来访问每一行数组和正确的索引来获取每一列
while ($row = mysqli_fetch_array($res))
echo '<textarea>'. $row['name'] .'</textarea><br/>';
echo '<textarea>'. $row['votes'] .'</textarea><br/>';
【讨论】:
@MagnusEriksson .. 正确 ..(我更喜欢点连接) 正如我在 cmets 中所述,他们的代码中还有很多其他错误。 @scaisEdge 恕我直言,答案不完整;它并没有完全涵盖所有错误,即使我在 cmets 中有(并且出于多种原因不想发布答案)。如果我的 cmets 碰巧消失了(这完全有可能),那么该问题的未来读者可能不会知道真正的(完整)解决方案。解决方案不应基于 cmets。 @scaisEdge 如果我的 cmets 消失了怎么办? lol!! 无论如何......我认为这是一个糟糕的问题。我喜欢你和所有人,但考虑到你的代表和经验,你应该把所有这些都放在你的答案中,而不是依赖于 cmets。 @scaisEdge 我不时删除 cmets(我可以,它们是我的 lol)。我不是要您删除答案,因为它确实解决了“直接”问题;循环(成功)结果。但是,您必须考虑未来读者的问题。他们中的一些人甚至可能是(低代表)成员,他们认为他们可以发布部分答案。这样做只会发出错误的信息。我想你可以同意我的观点。以上是关于如何从表中检索票数最高的候选人姓名[关闭]的主要内容,如果未能解决你的问题,请参考以下文章