如何将这个查询转换在Yii框架模型
问题描述:
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
答
$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
答
还没有测试过。但它可能像这样工作
$user = User::model()
->with('post')
->findAll(
array(
'select'=>array('id','username','score','totalPost'=>'count(ownerId)'),
'group'=>'id',
'order'=>'score DESC,totalPost DESC'
)
);
http://www.yiiframework.com/doc/guide/1.1/en/database.dao – 2011-02-10 11:38:24
请记住,以及利用网络调试吧,它会显示你查询正在执行。这可以帮助你写代码,因为你可以看到你离你想要的距离有多远。 – 2011-02-10 11:44:34
你是什么意思“转换”?你只是想直接执行它?或者你有一个用户模型,你想使用CDBCriteria查询这些用户? – thaddeusmt 2011-02-10 16:03:23