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.