当我尝试在 navicat 上运行它时,我有使用变量的查询,它运行良好。但出于某种原因,我在 Yii 上运行时遇到了问题。
我使用这段代码:
$connection = Yii::app()->db;
$sql = "
select s.name, s.type
from (
select *
, (@rn := if(@cur=type, @rn+1, 1)) as rn
, @cur := type
from games
join (select @cur := '') i
order by
type
) s
where rn <= 10 ";
$command = $connection->createCommand($sql);
$results = $command->queryAll();
此查询应从每种游戏类型中选择 10 个游戏名称。当我在 navicat 上运行它时会发生什么,当我在网站上尝试它时,它只为每种游戏类型返回一个游戏名称。 有人知道它发生的原因吗?如何解决?也许如何根据标准运行它?请帮助我。
顺便说一句,我使用这个查询(tnx 到 Andomar)的原因是因为其他查询占用了大量资源。
最佳答案
这不是Yii
的问题。使用纯 PDO
,此 sql 仅返回一行。
分析子查询结果,我意识到 @rn
变量没有存储以前的值,但是 @cur
存储了。所以,我添加了 join
来初始化 @rn
变量。
将您的 SQL
更改为:
$connection = Yii::app()->db;
$sql = "
select s.name, s.type
from (
select *
, (@rn := if(@cur=type, @rn+1, 1)) as rn
, @cur := type
from games
join (select @cur := '') i
join (select @rn := '') j
order by
type
) s
where rn <= 10 ";
$command = $connection->createCommand($sql);
$results = $command->queryAll();
关于mysql - yii 给常规查询带来麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14861508/