如何在 mysql 中获取 "x highest value"

How to get the "x highest value" in mysql

我还是 Java 和 Whosebug 的初学者。

我在 java 中为我的世界服务器编写了一个插件,使用 mysql 作为统计系统(杀死死亡点数)

我想知道如何获得 "Points" 最高的玩家,所以我想获得 "Playername" 其中 "Points" 最高。 我也想获得第二高,第三高等

我使用了准备好的语句,例如:

public static int getPoints(String Playername) {
    int Points = 0;
    try {
        PreparedStatement st = con
                .prepareStatement("SELECT Points FROM FFA WHERE UUID = '"
                        + PlayerUtil.getUUID(Playername) + "'");
        ResultSet rs = st.executeQuery();
        if (rs.next()) {
            Points = rs.getInt("Points");
        } else {
            Points = 0;
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return Points;
}

如果你能帮助我,那就太好了! 感谢您的宝贵时间!

PS: 我的 SQL 结构:

Playername varchar(64)
UUID varchar(64)
Kills int
Deaths int
Points int

您可以在 SQL 中尝试这样的操作:

select playername from FFA where points=(select max(points) from FFA);

这个查询可以return多行...

您可以使用以下语句来执行此操作:

select playername from FFA order by points desc limit 10;

这将是 return 前 10 名玩家

或者你可以做类似的事情

select playername from FFA where points >= 1337 order by points DESC;

然后您可以循环遍历调用 rs.next() 的每个条目。使用 rs.next() 首次获取将使您获得更多积分,因为您使用了 order by.

所以代码看起来像这样:

public static String getTopPlayer() {
    int limit = 10;

    try {
            preparedstatement st = con 
                    .preparestatement("select * from FF order by points desc limit "
                                    + limit);
            resultset rs = st.executequery();
            if (rs.next()) {
                    name = rs.getString("playername");
                    //if rs.next() rs.getString("playername"); <-- returns second
                    //if rs.next(); rs.getString("playername"); <-- returns third
            } else {
                    name = null;
            }   
    } catch (sqlexception e) {
            e.printstacktrace();
    }
    return name;