-4

我正在使用 Yii CDbCommand 从 mysql 获取结果。
我在 mysql 查询和 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个不一样。
有点奇怪。

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

4

2 回答 2

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
于 2013-12-12T06:08:38.250 回答
-2

我知道是什么问题。因为 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 的问题。

于 2013-12-13T01:47:55.420 回答