我搜索了包括Stackoverflow在内的所有地方的答案,但找不到我正在寻找的确切信息。就像我在其他网站上尝试过那些答案一样,并且在StackOverFlow上有一些答案,但它没有用。
问题在于我正在开展一个项目,其中前十名(又名:“排行榜/图表”)显示最高声誉,但保持低(第一)然后随机(例如:低,高,低,中等) )基于声誉。这很奇怪,我在SQLi命令方面没有经验,所以叫我一个菜鸟(我会接受)。
这是我目前编写的代码不起作用的代码:
<h1>Leaderboards</h1>
<?php
$query = "SELECT user_name, reputation FROM m_users ORDER BY reputation DESC LIMIT 10";
?>
<div class="panel panel-default">
<div class="panel-heading">
top ten
</div>
<div class="panel-body">
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th>User</th>
<th>Reputation Points</th>
</tr>
</thead>
<tbody>
<?php
foreach($mysqli->query($query) as $rep)
{
echo '<tr>';
echo '<td>';
echo ''.$rep['user_name'].'';
echo '</td>';
echo '<td>';
echo $rep['reputation'];
echo '</td>';
echo '</tr>';
}
?>
</tbody>
</table>
</div>
</div>
</div>
出现的结果是:
jay 100
ray 1000
joy 250
我想要的是:“从最高到最低”(简单图表/排行榜),例如:“在一些在线游戏多人游戏中,如”使命召唤“,它按分数显示最高到最低......等等。这只会产生最低,最高,最低,中等......
我根本无法修复此问题,任何人都可以帮助我检测错误吗? :(
答案 0 :(得分:1)
尝试这样的事情
SELECT `user_name`, `reputation` FROM `m_users` ORDER BY convert(`reputation`, UNSIGNED INTEGER) DESC;
答案 1 :(得分:0)
我认为是因为数据库中的信誉列不是int而是varchar或text。
答案 2 :(得分:0)
如果将varchar更改为int,那么您将获得所需的结果。
答案 3 :(得分:0)
您可以对类型使用CAST()函数:BINARY,CHAR,DATE,DATETIME,TIME,DECIMAL,SIGNED,UNSIGNED
SELECT user_name, reputation FROM m_users ORDER BY CAST(`reputation` AS UNSIGNED) DESC LIMIT 10