我正在使用Yii CDbCommand从mysql中获取结果
我在mysql查询和var_dump Yii的CDbCommon 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个不同
这很奇怪。
编辑:最奇怪的是,这个问题几分钟后就消失了
并出现在另一个"LIMIT 6 OFFSET xx"中
xx不是一直都一样
所以我认为这是PDO或Yii中的缓存机制吗?
试试这个
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
我知道问题出在哪里。因为Yii CDbCommand.php的buildQuery()函数连接SQL时使用"'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 bug还是Yii。