Mysql 我在常规查询中遇到了麻烦

Mysql 我在常规查询中遇到了麻烦,mysql,yii,Mysql,Yii,我有一个使用变量的查询,当我尝试在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 f

我有一个使用变量的查询,当我尝试在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更改为:


一个$results的var_转储显示了什么?tnx它是有效的,但我仍然试图理解为什么在navicat上运行它时效果很好。你有教程,我可以在那里学到更多关于使用变量的技巧?@Dennis,试试官方文档:。它说:作为一般规则,您永远不应该给用户变量赋值,而应该在同一条语句中读取值。你可能会得到你期望的结果,但这并不是保证。。我不是这种使用变量的专家。在我看来,先阅读所有类型,然后使用union和limit 10构建语句更安全。
$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();