回答編集履歴

1

2017/05/22 09:02

投稿

moke
moke

スコア2241

test CHANGED
@@ -9,3 +9,27 @@
9
9
  とやればいいですかね。
10
10
 
11
11
  とりあえずas_jsonがキモです。
12
+
13
+
14
+
15
+ すみませんうろ覚えで調べてました。
16
+
17
+ ```ruby
18
+
19
+ Post.joins("inner join posts as self_posts").group("posts.id").order("posts.like_count").select("sum(self_posts.like_count>posts.like_count)+1 AS rank,posts.like_count,posts.id").as_json
20
+
21
+ ```
22
+
23
+ これでどうでしょう。
24
+
25
+ 解説は自己結合(自分を含めた全てのレコードと結合レコード数はn*nになります)
26
+
27
+ して、自分より小さいlike_countを数え上げて1を足しています。
28
+
29
+
30
+
31
+ 正直数が増えてくると(数十万件レベル)すごく重いです。
32
+
33
+
34
+
35
+ 重くなる場合は[Redis](http://qiita.com/yokozawa/items/aae59b53897ca12f7064)を使って実装することをオススメします。