2012-03-07 20 views
0

我想通過使用Java和SQL的外部數據庫來確定用戶的評分。這是我到目前爲止:用戶對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

嘗試以下操作:

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' 
+0

看到編輯上面更新 – tribal 2012-03-07 01:07:32

+0

感謝您的幫助! :) – 2012-03-07 13:42:46

0

首先,你提供的方法有語法錯誤,則關閉功能體C =後的getConnection(); 您應該閱讀結果集here的javadocs。 您可以通過做閱讀你的分數:

if (rs.next()) { 
    score = rs.getInt("SCORE"); 
} 

不需要while循環,因爲你只需要一個用戶:)的得分 此外,這種方法不返回給定用戶的評分,這返回所有用戶的最高分數。您應該修改您的查詢以執行以下操作:

String query="SELECT * FROM USERS WHERE USERID = " + user.getId() + "ORDER BY SCORE DESC"; 

您是否明白爲什麼?

+0

嗨!謝謝你的幫助。我設法通過傳遞用戶名來完成它。這個方法是我有一個用戶登錄的類的一部分。因此,通過登錄,我應該獲取用戶名並根據得分位置確定排名。這是我的最終代碼: – 2012-03-07 13:40:52

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; 

}