Php Laravel3中的复杂sql语句

Php Laravel3中的复杂sql语句,php,mysql,pdo,laravel-3,Php,Mysql,Pdo,Laravel 3,这是我目前的代码 $piv0 = "SET @pivot_query = NULL;"; $piv1 = "SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(custom_field = \"\"',custom_field,\"\"', cf_values, NULL)) AS ',custom_field)) INTO @pivot_query FROM custom_fields_values; "; $piv2 = "SET

这是我目前的代码

    $piv0 = "SET @pivot_query = NULL;";
    $piv1 = "SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(custom_field = \"\"',custom_field,\"\"', cf_values, NULL)) AS ',custom_field)) INTO @pivot_query FROM custom_fields_values; ";

    $piv2 = "SET @pivot = CONCAT('SELECT subscriber_id, ', @pivot_query, ' FROM custom_fields_values GROUP BY subscriber_id');";

    $piv3 = "SET @sql = CONCAT('SELECT * FROM user_data_3 LEFT JOIN (',@pivot,') piv ON user_data_5.aw_id = piv.subscriber_id');";
    $piv4 = "PREPARE stmt FROM @sql; ";
    $piv5 = "EXECUTE stmt;";
    $piv6 = "DEALLOCATE PREPARE stmt;";

    $db = DB::connection()->pdo;
    $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

    $query = $db->prepare($piv0);
    $query->execute();

    $query = $db->prepare($piv1);
    $query->execute();

    $query = $db->prepare($piv2);
    $query->execute();

    $query = $db->prepare($piv3);
    $query->execute();

    $query = $db->prepare($piv4);
    $query->execute();

    $query = $db->prepare($piv5);
    $query->execute();

    $query = $db->prepare($piv6);
    $query->execute();

    $result = $query->fetchAll();
但是,我得到了一个错误:

General error: 2014 Cannot execute queries while other unbuffered queries are active.  Consider using PDOStatement::fetchAll().  Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
我看了其他一些SO问题,有人提到
$query->fetchAll()
和/或
$query->closeCursor()
应该会有帮助,但它们在这里对我没有帮助

我在
$query=$db->prepare($piv4)上得到错误


我还应该尝试什么?

您正在执行部分或一个查询,而您应该通过
添加它们。请尝试这样执行它们

$piv = "SET @pivot_query = NULL;";
$piv .= "SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(custom_field = \"\"',custom_field,\"\"', cf_values, NULL)) AS ',custom_field)) INTO @pivot_query FROM custom_fields_values; ";

$piv .= "SET @pivot = CONCAT('SELECT subscriber_id, ', @pivot_query, ' FROM custom_fields_values GROUP BY subscriber_id');";

$piv .= "SET @sql = CONCAT('SELECT * FROM user_data_3 LEFT JOIN (',@pivot,') piv ON user_data_5.aw_id = piv.subscriber_id');";
$piv .= "PREPARE stmt FROM @sql; ";
$piv .= "EXECUTE stmt;";
$piv .= "DEALLOCATE PREPARE stmt;";  
 $db = DB::connection()->pdo;

$query = $db->prepare($piv);
$query->execute();
$result = $query->fetchAll();
编辑:


我设法想出了一个解决办法:

$middleQueryRes = DB::query("SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(custom_field =''', custom_field,''', cf_values, NULL)) AS ',custom_field)) FROM custom_fields_values;");
foreach ($middleQueryRes[0] as $value) {
   $middleQueryRes = $value
   break;
 }

$middleQuery2 = "SELECT subscriber_id, $middleQueryRes FROM custom_fields_values GROUP BY subscriber_id";

$finalRes = DB::query("SELECT * FROM user_data_3 LEFT JOIN ($middleQuery2) piv ON user_data_5.aw_id = piv.subscriber_id");

已经尝试过了,但它也不起作用-我得到了相同的错误。新错误-“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在“SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF)(custom_field=”附近使用的正确语法“,”自定义_字段“,”在第1行“我在两处都将“”替换为“”,但我再次遇到错误。顺便说一句,我在网上找到了此查询。我从这里获取查询:删除了setAttribute,尝试了新查询,不再工作,语法错误(带引号的内容)与以前相同。让我们来看看
$middleQueryRes = DB::query("SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(custom_field =''', custom_field,''', cf_values, NULL)) AS ',custom_field)) FROM custom_fields_values;");
foreach ($middleQueryRes[0] as $value) {
   $middleQueryRes = $value
   break;
 }

$middleQuery2 = "SELECT subscriber_id, $middleQueryRes FROM custom_fields_values GROUP BY subscriber_id";

$finalRes = DB::query("SELECT * FROM user_data_3 LEFT JOIN ($middleQuery2) piv ON user_data_5.aw_id = piv.subscriber_id");