-4

Yii CDbCommand を使用して mysql から結果を取得しています。
SQL を mysql クエリと 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 のキャッシュ メカニズムだと思いますか?

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

私は問題を知っています。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 のバグなのかわかりません。

于 2013-12-13T01:47:55.420 に答える