Как правильно составить DbDependency на Yii2?

Имеется следующий код, выборка из базы данных самых посещаемых статей:
if (!$data = Yii::$app->cache->get('recent_list_post')) {
            $data = Post::find()
                ->with(['imageR', 'categoryR'])
                ->active()
                ->orderBy('hits DESC')
                ->limit(4)
                ->all();

            $dependency = new DbDependency([
                'sql' => 'SELECT SUM(hits) FROM ' . Post::tableName() . 'WHERE status=' . Post::STATUS_ACTIVE . ' ORDER BY hits DESC limit 4',
            ]);
            Yii::$app->cache->set('recent_list_post', $data, 60*60, $dependency);
        }
        $this->data = $data;

Как правильно составить DbDependency чтобы отследить изменился ли состав 4 самых посещаемых статей?
Казалось бы SUM(hits) или SUM(id) или SUM(hits*id) подошло бы по логике, но SUM не воспринимает LIMIT а высчитывает сумму по всем записям в таблице.
Как переписать запрос чтобы DbDependency sql получить что то вроде хеша из id или hits последних 4 статей?
  • Вопрос задан
  • 1049 просмотров
Решения вопроса 1
evgenybuckharev
@evgenybuckharev Автор вопроса
Если кому понадобится вот решение:
SELECT SUM(s.id)*SUM(s.hits) FROM (SELECT p.hits,p.id FROM `htc_post`as p WHERE p.status=2 ORDER BY p.hits DESC LIMIT 4) as s
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@sfedosimov
Не лучший вариант, но первое что пришло в голову, можно сделать с вложенным запросом, где сначала вытащить 4 топ, а потом по ним сделать sum
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы