2016-05-25 10 views
1
$connection = Yii::app()->db; 
    $command=$connection->createCommand($sqlStatement); 
    $rows=$command->queryAll(); 

上記のコードを実行しているSQLとMySQL Workbenchで同じSQLを実行していることを比較しています。そして、2つは異なる行数を返します。CDbCommand-> queryAll()ですべての行が返されない

のMySQL Workbenchは、すべての行を返しています。上記のコードは常に合計よりも小さい数値を返します。

制限はコマンドの-1です。他に何を確認するか分からない。いくつかのYiiの制限はありますか?行を制限するメモリ制約? Yiiのキャッシュのようなもの?

は、(SELECT文の束から下流の.phpスクリプト内に置かれている)上記のコードの前に実行可能な以前のSQL文は、この影響を与えることができますか?

私はYiiのに新しいが、SQLやMySQLとむしろバッフル付きませんよ。

+0

を参照してください – scaisEdge

+0

SELECT * FROM table1 – Trober

+0

または私のデータベース内の任意のテーブル – Trober

答えて

0

queryAll()戻り配列を聞き、uはすべてのレコードを取得するために反復処理する必要があります。

foreach($rows as $row){ 
    //do something 
} 

部分で照会してください:

$limit = 1000 ; 
$passes = ceil(Yii::app()->db->createCommand('SELECT COUNT(*) FROM{{test_data}}')->queryScalar()/$limit) ; 

for ($pass = 0 ; $pass < $passes ; $pass++) { 
$command = Yii::app()->db->createCommand() 
    ->select('*') 
    ->from('{{test_data}}') 
    ->limit($limit) 
    ->offset($pass * $limit) ; 
$result = $command->queryAll() ; // here is your peace of data 
} 
+0

iteratingを試しましたが、num_rowsがテーブルの合計レコードよりも小さい数値で戻ってきたので動作しませんでした。ループはnum_rowsを超えません。 – Trober

0

これは答えに私を導いた:Mysql "select * from" doesn't return all rows

結局のところ、MySQLデータベースがISAMです。データベースをクリーンアップして復元した後、クエリはすべての行を戻し始めました。

関連する問題