2012-01-03 2 views
0

У меня есть стол «сообщения», и сообщение может иметь несколько комментариев (внешнее отношение-ключ). Теперь я хочу сделать соединение, которое дает мне для каждого сообщения последний комментарий (с самым высоким ID).Групповой максимум с Yii CdbCriteria

С «нормальным 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? Спасибо за помощь.

ответ

0

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

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, 
    )); 
} 

Надеется, что это поможет .. :)

+0

Спасибо за ваш ответ, но предлагаемый вами запрос дает мне правильный идентификатор и распространяется, но не связанное с ним сообщение. – dave3011

Смежные вопросы