【问题标题】:PHP - how do I get top ten records from database by highest to lowestPHP - 我如何从数据库中从最高到最低的前十名记录
【发布时间】:2016-04-08 17:15:35
【问题描述】:

我在包括 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

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

我根本无法解决这个问题,谁能帮我检测一下这个错误? :(

【问题讨论】:

  • 如果你执行你的 MySQL 查询,你的结果是什么??
  • 它显示 = jay [100],ray = [1000] & joy = [250]。这不是按顺序排列的,它应该是从高到低,但奇怪的是从低到高显示:/ :(
  • 嗨,我认为您必须将 reputation 列作为 varchar 类型而不是 int。这就是您以“100”->“1000”->“250”的方式排序的原因。您应该将信誉列中的变量类型更改为整数。看看有没有帮助。

标签: php mysql mysqli charts


【解决方案1】:

试试这样的

SELECT `user_name`, `reputation` FROM `m_users` ORDER BY convert(`reputation`, UNSIGNED INTEGER) DESC;

【讨论】:

  • 您好豪尔赫,非常感谢您。问题是我的数据库设置显示:作为“Varchar”,我将其更改为“Int”,它工作得很好。一切都已整理好,感谢您和其他所有抽出时间重播我的问题的人。任何为此苦苦挣扎的人,答案是:在数据库设置中将其设置为“INT”。再次感谢 Jorje :) 以及其他所有人
【解决方案2】:

我认为这是因为数据库中的信誉列不是 int 而是 varchar 或 text。

【讨论】:

    【解决方案3】:

    您可以对以下类型使用 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
    

    【讨论】:

      【解决方案4】:

      如果您将 varchar 更改为 int,那么您将获得所需的结果。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多