Скажите, у меня есть следующая таблица.
USER_POINT
USER_ID | BIGINT | PK
USER_POINT | BIGINT |
USER_POINT может постоянно обновляться.
С учетом USER_ID
я хочу номер расстояния от вершины в выборе, упорядоченный по USER_POINT
.
SEQ USER_ID USER_POINT
----- ------- -----------
00001 232132 32423423432
00002 023944 32423423431
..... ...... ...........
01007 000034 xxxxxxxxxxx // I want to know the 01007 with given 000034
Я еще не запрограммирован, но вот какой-то псевдокод, который я собираюсь попробовать.
public int getRank(final Long userId) {
final int pageSize = 500;
int pageCount = 0;
int firstResult = 0;
for (int firstResult = 0; true; firstResult += pageSize) {
final Query query = em.createQuery(
"SELECT u.id FROM UserPoint u ORDER BY u.point");
query.setFirstResult(firstResult);
query.setMaxResults(pageSize);
final List orders = query.getResultList();
if (orders.isEmpty()) {
break;
}
final int index = orders.indexOf(userId);
if (index != -1) {
return pageSize * pageCount + index;
}
pageCount++;
}
return -1;
}
Я хочу спросить
Is this the right way?
Is this the only way?
Спасибо.