Yii2 Active Query как собрать запрос mysql с подзапросом?

77
02 марта 2021, 06:30

Как через query builder собрать вот такой mysql запрос?

SELECT t1.* FROM tsg_message t1 INNER JOIN (
SELECT chat_id, MAX(created_at) AS max_created_at FROM tsg_message GROUP BY chat_id
) t2
ON t1.chat_id = t2.chat_id AND t1.created_at = t2.max_created_at

Если это важно, то данный запрос мне нужен в SearchModel для группировки сообщений по признаку chat_id и мне нужно, чтобы в группировку попадали только самые последние сообщения. Есть у кого-нибудь идеи?

Answer 1

Решение данного вопроса:

 $subQuery = Message::find()
            ->select(['chat_id', 'MAX(created_at) AS max_created_at'])
            ->groupBy('chat_id');
        $query = Message::find();
        $query->alias('t1');
        $query->innerJoin(['t2' => $subQuery], 't1.chat_id = t2.chat_id AND t1.created_at = t2.max_created_at');
READ ALSO
Не могу запустить php7.2-fpm

Не могу запустить php7.2-fpm

Не получается запустить php72-fpm

105
SQL Найти и заменить часть текста с тегами

SQL Найти и заменить часть текста с тегами

В базе данных, в поле description есть фрагмент кода:

95
Как добавить запись в таблицу rbac

Как добавить запись в таблицу rbac

есть в yii2 такая вещь как rbac, в ней есть таблица auth_item_child, в ней поля parent и child, в эти поля можно вставить только значения из таблицы auth_item, поля...

94