2012-07-04 1 views
0
select 
    user_id, 
    @pos:=(@pos+1) as new_position, 
    (coins+total_item_costs) as wealth 
from user_ledger 
join users using (user_id),(select @pos:=0) p 
ORDER BY wealth DESC 
limit 10; 

+---------+--------------+------------+ 
| user_id | new_position | wealth  | 
+---------+--------------+------------+ 
|  19 |   19 | 1112823871 | 
|  11 |   11 | 13318047 | 
|  8 |   8 | 7292407 | 
|  6 |   6 | 6122746 | 
|  27 |   27 | 5271889 | 
|  23 |   23 | 5263050 | 
|  9 |   9 | 5171734 | 
|  3 |   3 | 5136092 | 
|  15 |   15 | 5097488 | 
|  4 |   4 | 5089487 | 
+---------+--------------+------------+ 
10 rows in set (0.01 sec) 

New_position неверно. Что случилось, ребята? :)mysql запрос для рейтинговой системы

пс. pls не говорит мне использовать временную таблицу

ответ

0

Должно сделать ЗАКАЗАТЬ заранее.

SELECT user_id,@pos:=(@pos+1) as new_position,wealth FROM (
     select user_id,(coins+total_item_costs) as wealth from user_ledger join users 
     using (user_id) ORDER BY wealth DESC limit 10) a,(select @pos:=0) p 
+0

Да, это работает, но я действительно не хочу использовать временную таблицу (даже скрытую) .. вы можете предложить запрос без него? –

+0

@IgorK: Возможно, это помогло бы, если бы вы могли объяснить * почему * вы не хотите использовать материализованные таблицы? – eggyal

+0

@eggyal: например, потому что я собираюсь использовать select как часть инструкции INSERT INTO .. ​​SELECT и не хочу использовать временное хранилище для результата :) –