Java 方法使用MySQL查询获取播放器的位置

Java 方法使用MySQL查询获取播放器的位置,java,mysql,database,eclipse-plugin,Java,Mysql,Database,Eclipse Plugin,我对SQL查询有问题。我想开发一个Minecraft插件。该插件包含一个统计信息。我想在统计中创建一个排名。杀戮最多的球员排在第一位,以此类推。。我创建了一个计算你的位置的方法。首先,SQL查询对选项卡进行排序,然后再查找您所在的位置 PreparedStatement ps = MySQL.getConnection().prepareStatement("SELECT * FROM (SELECT @r := @r+1 as pos, kills. * FROM kills, (SELECT

我对SQL查询有问题。我想开发一个Minecraft插件。该插件包含一个统计信息。我想在统计中创建一个排名。杀戮最多的球员排在第一位,以此类推。。我创建了一个计算你的位置的方法。首先,SQL查询对选项卡进行排序,然后再查找您所在的位置

PreparedStatement ps = MySQL.getConnection().prepareStatement("SELECT * FROM (SELECT @r := @r+1 as pos, kills. * FROM kills, (SELECT @r := 1) tmp ORDER BY Kills DESC) WHERE UUID = ?");
    ps.setString(1, uuid.toString());
    ResultSet rs = ps.executeQuery();
错误是: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解在第1行的“WHERE UUID=”37bb2c2c-e170-469c-a08e-6a22e7d083cd附近使用的正确语法


我不知道是什么错误

您不能在JDBC MySQL查询中使用用户变量。以下是查询的一个解决方法:

SELECT *,
    1 + (SELECT COUNT(*) FROM kills k2 WHERE k2.Kills > k1.Kills) AS pos
FROM kills k1
WHERE UUID = ?
如果您使用的是MySQL 8+,那么分析函数是一种更好的方法:

SELECT *, ROW_NUMBER() OVER (ORDER BY Kills DESC) pos
FROM kills
WHERE UUID = ?

您可能希望使用秩或密集秩。请注意,第一种相关子查询方法在技术上是返回一个秩,而不是一个行号,以防两个或多个记录的kill数绑定。

请提供示例数据和预期结果。您的表kills是否有列kills?您是否能够在sql客户端中执行此查询?您需要为内部查询使用别名,然后使用UUID SELECT*的别名,从SELECT@r:=@r+1 as pos,kills.*从kills中,选择@r:=1 tmp ORDER BY kills DESC X,其中X.UUID=?@Cury使用了什么解决方案?请将正确的解决方案标记为答案,以便其他人受益