有人可以让我知道如何使用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;
。
我想对我的选择进行排名,我认为这是好方法 在此先感谢您的回复:)
答案 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';
这种方式会使代码具有如此高的可读性,但由于您只需要完成这项工作,我只为您提供了纯粹的,未经优化的方式。 希望这可以帮助你解决问题。