我正在使用Yii CDbCommand从mysql中获取结果
我在mysql查询中记录SQL,并通过var_dump Yii的CDbCommand 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个是不同的 有点奇怪。
修改
最奇怪的是,几分钟后这个问题就消失了
并发生在另一个'LIMIT 6 OFFSET xx'中
xx始终不一样。
所以我认为它是PDO或Yii中的任何缓存机制?
答案 0 :(得分:0)
试试这个
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'
修改强>
对于偏移误差'LIMIT 6 OFFSET xx'。
将您的查询更改为
GROUP BY `referer_url_id` LIMIT 30, 6
答案 1 :(得分:-2)
我知道这是什么问题。因为连接SQL的Yii CDbCommand.php的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。