使用Java和SQL进行用户排名

时间:2012-03-07 00:22:20

标签: java mysql

我试图通过使用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循环来返回排名。如果有人有任何建议我会非常感激。

3 个答案:

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

 }