yii自定义查询和CSqlDataProvider

时间:2013-12-07 16:47:02

标签: sql yii ranking

有人可以让我知道如何使用CSqlDataProvider运行此查询(yii framework(php))

SET @rank=0;
SELECT @rank:=@rank+1 AS rank, fruit, amount


FROM sales
 ORDER BY amount DESC
;

我可以像下面这样做,但是

$sqlProvider = new CSqlDataProvider('
SELECT @rank:=@rank+1 AS rank, nameAndFam
  FROM user
');

在上述命令之前无法初始化SET @rank=0;

我想对我的选择进行排名,我认为这是好方法 在此先感谢您的回复:)

1 个答案:

答案 0 :(得分:2)

您可以尝试使用数据库访问对象(DAO)中的YII createcommnd,它将提供最低级别的数据库工作,您可以从任何类型创建任何查询。

$sql1 = 'SET @rank=0;';
$sql2 = 'SELECT @rank:=@rank+1 AS rank, fruit, amount
    FROM sales
     ORDER BY amount DESC';
$cmd1 = Yii::app()->db->createCommand($sql1);
$cmd2 = Yii::app()->db->createCommand($sql2);

$cmd1->execute();
$result = $cmd2->query();

之后,您可以使用foreach循环遍历从此查询返回的对象数组

您可以创建创建单独的功能,例如:

$cmd->select ='SELECT @rank:=@rank+1'; 

这种方式会使代码具有如此高的可读性,但由于您只需要完成这项工作,我只为您提供了纯粹的,未经优化的方式。 希望这可以帮助你解决问题。