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
        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/

上一篇:php搜索模块

下一篇:Php删除语法

相关文章:

php - 带有 MySQL 数据库的 PHP Yii 框架上的应用程序是否可以处理 20,000 名员工的 ERP 解决方案?

php - Yii - 获取自动递增 id

php - 在 .change <select> 上重新查询 mysql

mysql - 为什么我不能对 SQL 'rank scores' 使用 dense_rank?

mysql - 更新许多(如 1000)行 MSSQL 与 MySQL(ASP NET MVC 5 与 Django 1.6)

php - 计算关系表条目

php - 如何在 Yii 中设置 returnUrl 值

twitter-bootstrap - Yii2 ListWidget自定义css的问题

mysql - 所有行中重复的列的最小值和最大值

php - 如何从 Joomla 2.5 数据库列、字段名称和值中获取值