У меня есть таблица episodes
и таблица episode_Listen
, что является одним эпизодом для многих слушателей
Я хочу получить 6 эпизодов с наибольшим количеством прослушиваний. Я пробовал каждое решение, подобное следующему:
$trending = Episode::where('active', true)
->get()->sortBy(function($podcast) {
return $podcast->latestListens;
});
Или
$trending = Episode::where('active', true)
->withCount('listens')
->orderBy('listens_count', 'desc')
->get();
Или
$trending = Episode::join('episode_listens', function ($join) {
$join->on('episode_listens.episode_id', '=', 'episodes.id');
})
->groupBy('episodes.id')
->orderBy('count', 'desc')
->select((['episodes.*', DB::raw('COUNT(episode_listens.podcast_id) as count')]))->paginate(6);
Но время выполнения всегда превышает 6 секунд, потому чтоУ меня около 500 тыс. Прослушиваний записей в базе данных, и за очень короткий промежуток времени их станут миллионы.
Есть мысли?
Заранее спасибо