как преобразовать этот запрос в каркасной модели yii - PullRequest
0 голосов
/ 10 февраля 2011
SELECT u.id, u.username, u.score, 
(SELECT COUNT(ownerId) FROM post p WHERE p.ownerId = u.id) AS totalPost 
FROM users u 
ORDER BY u.score DESC, totalPost DESC LIMIT 10

Ответы [ 2 ]

4 голосов
/ 10 февраля 2011
$sql = "SELECT u.id, u.username, u.score, ".
   "(SELECT COUNT(ownerId) FROM post p WHERE p.ownerId = u.id) AS totalPost ".
   "FROM users u ".
   "ORDER BY u.score DESC, totalPost DESC ".
   "LIMIT 10";
$command=Yii::app()->db->createCommand($sql);
$results=$command->query();

или если у вас есть модель пользователя (я думаю , это будет работать - я не проверял ни одну из них;)

$criteria = new CDbCriteria();
$criteria->select = "t.id, t.username, t.score, (SELECT COUNT(ownerId) FROM post p WHERE p.ownerId = t.id) AS totalPost";
$criteria->order = "u.score DESC, totalPost DESC";
$criteria->limit = "10";
$results = User::model()->findAll($criteria); // this returns an array of User models
1 голос
/ 11 февраля 2011

Не проверял это.Но это может работать так:

$user = User::model()
      ->with('post')
      ->findAll(
          array(
            'select'=>array('id','username','score','totalPost'=>'count(ownerId)'),
            'group'=>'id',
            'order'=>'score DESC,totalPost DESC'
          )
      );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...