我试图通过使用Java和SQL从外部数据库得分来确定用户的排名。这是我到目前为止所做的:
public int findRanking(User user){
int count =0;
if (c == null) {
c = getConnection();
}
try{
Statement s =c.createStatement();
String query="SELECT * FROM USERS ORDER BY SCORE DESC";
ResultSet rs = s.executeQuery(query);
while(rs.next()){
..
}
}catch (Exception e) {
System.out.println("exception: " + e);
}
我不确定如何操作while循环来返回排名。如果有人有任何建议我会非常感激。
答案 0 :(得分:0)
请尝试以下操作:
SET @ranking := 0;
SELECT @ranking := @ranking+1 as ranking, * FROM (SELECT * FROM USERS ORDER BY SCORE DESC)
通过这种方式,您不需要使用while循环来确定排名。
建议:代替*,列出您期望的字段 - 查询速度更快。
对于单个用户:
SET @ranking := 0;
SELECT * from (SELECT @ranking := @ranking+1 as ranking, * FROM (SELECT * FROM USERS ORDER BY SCORE DESC) U) W where userId='89'
答案 1 :(得分:0)
首先,你提供的方法有语法错误,你在c = getConnection()之后关闭函数体; 您应该阅读结果集here的javadoc。 您可以通过以下方式阅读您的分数:
if (rs.next()) {
score = rs.getInt("SCORE");
}
不需要while循环,因为你只需要一个用户的分数:) 此外,此方法不返回给定用户的分数,它返回所有用户的最高分数。您应该修改您的查询以执行以下操作:
String query="SELECT * FROM USERS WHERE USERID = " + user.getId() + "ORDER BY SCORE DESC";
你明白为什么吗?
答案 2 :(得分:0)
最终代码。非常感谢你的帮助:
public int findRanking(String username){
int rank =1;
if (c == null) {
c = getConnection();}
try{
Statement s =c.createStatement();
String query="SELECT * FROM USERS ORDER BY SCORE DESC";
ResultSet rs = s.executeQuery(query);
while(rs.next()){
String current=rs.getString("USERNAME");
if(username.equals(current)){
return rank;
}
else{
rank++;
}
}
}catch (Exception e) {
System.out.println("exception: " + e);
}
return rank;
}