【问题标题】:how to convert this query in yii framework model如何在 yii 框架模型中转换此查询
【发布时间】:2011-02-10 11:34:49
【问题描述】:
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

【问题讨论】:

  • 请记住使用 Web 调试栏,它会显示正在执行的查询。当您编写代码时,这真的很有帮助,因为您可以看到您与您想要的东西有多近/多远。
  • “转换”是什么意思?你只是想直接执行它吗?或者你有一个用户模型并且你想使用 CDBCriteria 查询这些用户?

标签: php sql yii


【解决方案1】:
$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

【讨论】:

  • 如果我的回答有帮助,请考虑接受。谢谢!
【解决方案2】:

没有测试过。但它可以像这样工作

$user = User::model()
      ->with('post')
      ->findAll(
          array(
            'select'=>array('id','username','score','totalPost'=>'count(ownerId)'),
            'group'=>'id',
            'order'=>'score DESC,totalPost DESC'
          )
      );

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2011-02-01
    • 2019-07-28
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多