1

当我尝试在 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 to Andomar)的原因是因为其他查询占用了大量资源。

4

1 回答 1

3

这不是Yii问题。使用 pure 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();
于 2013-02-14T19:58:54.277 回答