Yii CDbCommand queryAll() возвращает неверный результат

Я использую Yii CDbCommand для получения результата из MySQL.
Я регистрирую SQL в запросе mysql и с помощью var_dump Yii's CDbCommand SQL и того, и другого.
Это то же самое. Я получаю результат с помощью CDbCommand->queryAll().
Но результат не такой же, как при запуске того же SQL в phpMyAdmin.

> 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. Я получаю 6 результатов из queryAll и phpMyAdmin.
Но только 3 из них одинаковы. Остальные 3 разные.
Это странно.

РЕДАКТИРОВАТЬ: Самое странное, что через несколько минут эта проблема исчезнет.
И появляются в другом "LIMIT 6 OFFSET xx".
хх не то же самое все время.
Так что я думаю, это какой-то механизм кеширования в PDO или Yii?

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'

РЕДАКТИРОВАТЬ:

И для ошибки смещения "LIMIT 6 OFFSET xx".

измените свой запрос на

GROUP BY `referer_url_id` LIMIT 30, 6

Я знаю, в чем проблема. Потому что функция buildQuery() Yii CDbCommand.php, которая присоединяется к 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 или Yii.

Другие вопросы по тегам