user
これを行う最善の方法は、モデル自体、または と 1:1 の関係を持つ別のモデルのいずれかで、事前に計算された合計をデータベースに保持することuser
です。これを行わないと、評価を取得するために常にすべてのユーザーの合計を計算する必要があります。つまり、テーブルでの完全なテーブル操作を意味しbets
ます。とはいえ、このクエリは望ましい結果を提供します。合計が同じ人が複数いる場合は、両方とも評価 X としてカウントされます。
select id, (select count(h.id) from users u inner join
(select user_id, sum(profitloss) as `total` from bets group by user_id) b2
on b2.user_id = u.id, (select id from users) h inner join
(select user_id, sum(profitloss) as `total` from bets group by user_id) b
on b.user_id = h.id where u.id = 1 and (b.total > b2.total))
as `rating` from users where id = 1;
user.id
クエリにプラグインする必要がありますwhere id = X
user
合計を追跡するためにテーブルに列を追加すると、クエリは少し単純になります。この例では、列名はtotal_profit_loss
次のとおりです。
select id, total_profit_loss, (select count(h.username)+1 from users u,
(select username, score from users) h
where id = 1 and (h.total_profit_loss > u.total_profit_loss))
as `rating` from users where id = 1;