首页 文章

Yii CDbCommand queryAll()返回错误的结果

提问于
浏览
-4

我正在使用Yii CDbCommand从mysql中获取结果 .
我在mysql查询中记录SQL,并通过var_dump Yii的CDbCommand SQL记录SQL .
一样的 . 我通过CDbCommand-> queryAll()获得结果 .
但结果与在phpMyAdmin中运行相同的SQL不同 .

> SELECT `referer_url_id` FROM `trend_referer` WHERE
> ((`site_id` = '45654' and `date` between '20131211' and '20131211'))
> GROUP BY `referer_url_id` LIMIT 6
> OFFSET 30;

这个SQL . 我从queryAll和phpMyAdmin得到6个结果 .
但其中只有3个是相同的 . 其他3个是不同的 .
有点奇怪 .

EDIT: 最奇怪的是,几分钟后这个问题就消失了 .
并发生在另一个'LIMIT 6 OFFSET xx' .
xx不是一直都是一样的 .
所以我认为它是PDO或Yii中的任何缓存机制?

2 回答

  • -2

    试试这个

    SELECT `referer_url_id` FROM `trend_referer` WHERE
    ((`site_id` = '45654' and (`date` between '20131211' and '20131211')) )
    GROUP BY `referer_url_id` LIMIT 6
    OFFSET 30;
    

    添加圆括号环绕 date between '20131211' and '20131211'

    EDIT:

    对于偏移误差'LIMIT 6 OFFSET xx' .

    将您的查询更改为

    GROUP BY `referer_url_id` LIMIT 30, 6
    
  • 0

    我知道这是什么问题 . 因为Yii CDbCommand.php的连接SQL的buildQuery()函数使用 "\n" 作为换行而不是空格 .
    例如 .

    SELECT * FROM table WHERE 1=1 GROUP BY field;

    会变成

    SELECT *\nFROM table\nWHERE 1=1\nGROUP BY field;
    

    这会导致不同的结果 .
    我修改了buildQuery() . 将"\n"替换为空格 . 我可以得到正确的结果集 .

    我正在测试MySQL-5.5.18-log版本 . 我不知道这是MySQL错误还是Yii .

相关问题