PHP - 如何从最高到最低从数据库中获取前十条记录

时间:2016-04-08 03:27:50

标签: php mysql mysqli charts

我搜索了包括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

我想要的是:“从最高到最低”(简单图表/排行榜),例如:“在一些在线游戏多人游戏中,如”使命召唤“,它按分数显示最高到最低......等等。这只会产生最低,最高,最低,中等......

我根本无法修复此问题,任何人都可以帮助我检测错误吗? :(

4 个答案:

答案 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,那么您将获得所需的结果。

这是一个例子: http://sqlfiddle.com/#!9/830896/1

答案 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