Запрос для поиска релевантных статей

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
satoved
Сообщения: 14
Зарегистрирован: 2015.10.07, 17:51

Запрос для поиска релевантных статей

Сообщение satoved »

Есть модель Article и некий набор разных категорий, куда может цепляться этот Article, например Category и List, и связи many-to-many в таблицах "article_list" и "article_category".

Задача: найти релевантные Article для заданной модели статьи, в которых совпадает хотя бы одна Category или List.

Получилось решить только через кучу запросов.

Код: Выделить всё

$categoryIds = new \yii\db\Query())
                ->select('category_id')
                ->from("article_category")
                ->where(['article_id' => $article->primaryKey])
                ->column();
                
$relevantByCategory = new \yii\db\Query())
                ->select('article_id')
                ->from("article_category")
                ->where(['category_id' => $categoryIds])
                ->all();
                
$listIds = new \yii\db\Query())
                ->select('list_id')
                ->from("article_list")
                ->where(['article_id' => $article->primaryKey])
                ->column();
                
$relevantByList = new \yii\db\Query())
                ->select('article_id')
                ->from("article_list")
                ->where(['list_id' => $listIds])
                ->all();
                
return Article::find()->where(['id' => ArrayHelper::merge($relevantByCategory, $relevantByList)])->all();               
А у меня 6 таких родительских моделей, получается 13 запросов на такую плевую задачу.

Подскажите красивое решение.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Запрос для поиска релевантных статей

Сообщение ElisDN »

13 запросов по индексам - это быстро. Удобнее через ElasticSearch, но для простого сайта это не всегда рентабельно.
Аватара пользователя
rodion_zlobin
Сообщения: 207
Зарегистрирован: 2017.01.11, 16:33

Re: Запрос для поиска релевантных статей

Сообщение rodion_zlobin »

Можно сократить, добавив or в where выражение
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Запрос для поиска релевантных статей

Сообщение ElisDN »

rodion_zlobin писал(а): 2017.03.30, 07:06 Можно сократить, добавив or в where выражение
Тогда будет пять IN SELECT подзапросов.
Ответить