2012-03-07 1 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) 

С этим не потребуется время цикла для определения рейтинга.

рекомендация: вместо *, перечислите поля, которые вы ожидаете - запрос быстрее.

для одного пользователя:

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

+0

Спасибо за помощь! :) –

0

Во-первых, метод вы при условии, была ошибка синтаксиса, вы закрыть тело функции после того, как с = GetConnection(); Вы должны прочитать javadocs для результатов here. Вы можете прочитать свой счет, выполнив:

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

нет необходимости для цикла в то время, так как вы хотите, только счет одного пользователя :) Кроме того, этот метод не возвращает счет данного пользователя, его возвращает самый высокий балл всех пользователей. Вы должны изменить свой запрос, чтобы что-то сделать в соответствии с:

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

Вы видите, почему?

+0

Привет! Спасибо за вашу помощь. Мне удалось это сделать, передав имя пользователя. Этот метод является частью класса, в котором у меня также есть логин. Поэтому, войдя в систему, я должен захватить имя пользователя и определить рейтинг по позиции оценки. Вот мой последний код: –

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; 

}