ma7ma7pipipi
@ma7ma7pipipi

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

laravel withcount order 重い

laravelを利用。
User の関連モデル Iine の withcount 順に並べたいが重い
もっと早くしたい。

iine は 50万件ほどデータを持っている

HogeController.php
$sql = User::query()
    ->withCount('iine30s')
    ->orderBy('iine30s_count', 'DESC')
    ->limit(25);
User.php
// いいね数
public function  iine30s()
{
    return $this
    ->hasMany('App\Models\Iine', 'foreign_key');
}

発行されるクエリ

"select `users`.*, (select count(*) from `iines` where `users`.`id` = `iines`.`foreign_key`) as `iine30s_count` from `users` order by `iine30s_count` desc"

もっと早くする方法はないでしょうか?
やっぱり cron で 先に計算し、DBに値を入れておくべきなんでしょうか。

0

1Answer

user_id毎のいいね数がランキングされればいいのなら、シンプルにGROUP BYするのはどうでしょうか?
(しばらくSQL書いてないんで動くかちょっと自信ないですが、、)

SELCT `foreign_key`, COUNT(`foreign_key`) as count FROM `iines` GROUP BY `foreign_key` ORDER BY count DESC
0Like

Your answer might help someone💌