Групповой максимум с Yii CdbCriteria - PullRequest
0 голосов
/ 04 января 2012

У меня есть таблица «сообщения», и сообщение может иметь несколько комментариев (внешний ключ-отношение). Теперь я хочу сделать объединение, которое дает мне для каждой публикации последний комментарий (с наибольшим идентификатором).

С "нормальным SQL" я бы использовал это:

SELECT p1.spread, p1.message, p1.id FROM posts AS p1, (SELECT
spread, MAX(id) AS maxid FROM posts GROUP BY spread) AS p2 WHERE
p2.spread = p1.spread AND p1.id = p2.maxid

Как бы я сделал это с CDbCriteria или любым другим методом CActiveRecord? Спасибо за вашу помощь

1 Ответ

0 голосов
/ 04 января 2012

Во-первых, ваш запрос довольно сложный .. Ваш результат будет таким же для запроса.

SELECT max(id) as id, spread, message 
    FROM posts
    GROUP BY spread

Теперь с CDbCriteria вы должны написать запрос в связанной модели

Например, в вашем случае это Posts.php (модель)

public function last_comment()
{
    $criteria = new CDbCriteria;
    $criteria->select = 'max(id) as id, spread, message';
    $criteria->group = 'spread';

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
}

Надеюсь, это поможет вам ..:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...