我有以下查询(该查询仅供实验使用)。
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'));
前两个查询似乎执行得很好。但在准备它崩溃。
答案 0 :(得分:0)
在这种情况下, 不是最好但更好的选择是从需要分组属性的查询创建数据库视图
或者更好地使用DB :: query(“单个字符串中的完整查询到此处”);