2016-09-26 11 views
1

私は次のクエリを持っています(このクエリは実験用です)。PHP/Laravelで変数付きのプリペアドステートメント - バッファされていない他のクエリがアクティブな間にクエリを実行できません

SELECT @sql:=GROUP_CONCAT(DISTINCT CONCAT('MAX(case when alias = ''', alias, ''' then data_varchar end) AS ', alias)) from documents 
left join property_values ON property_values.document_id=documents.id 
left join properties on properties.id = property_values.property_id; 

SET @sql = CONCAT('SELECT ', @sql, ', documents.* from documents left join property_values on property_values.document_id=documents.id left join properties on properties.id = property_values.property_id GROUP BY documents.id'); 

PREPARE stmt FROM @sql; 

EXECUTE stmt; 

DEALLOCATE PREPARE stmt; 

PHP/Laravelでは動作しません。私は準備された声明の中に何を入れるべきか、何を実行するかについてはわかりません。多くのことを試しましたが、ほとんどの場合エラーが発生しています:

バッファされていない他のクエリがアクティブな間はクエリを実行できません。 PDOStatementに使用を検討してください:: fetchAllの()

をマイコード:

DB::select(DB::raw('SELECT @sql:=GROUP_CONCAT(DISTINCT CONCAT(\'MAX(case when alias = \'\'\', alias, \'\'\' then data_varchar end) AS \', alias)) from documents 
         left join property_values ON property_values.document_id=documents.id 
         left join properties on properties.id = property_values.property_id;')); 

DB::select(DB::raw('SET @sql = CONCAT(\'SELECT \', @sql, \', documents.* from documents left join property_values on property_values.document_id=documents.id left join properties on properties.id = property_values.property_id GROUP BY documents.id\');')); 


DB::raw('PREPARE stmt FROM @sql;'); 

$result = DB::select(DB::raw('EXECUTE stmt')); 

最初の2つのクエリがうまく実行されているように見えます。しかし準備のためにそれはクラッシュします。

この場合

enter image description here

答えて

0

、 最高のより良いではないオプションは、グループ化されたプロパティ

ORより良いDBと一緒に行くための要件のために必要なクエリから、データベースビューを作成することです::クエリ(」 1つの文字列内の完全なクエリはここにあります ");

関連する問題