【问题标题】:Complex sql statement in Laravel 3Laravel 3 中的复杂 sql 语句
【发布时间】:2014-03-10 19:05:55
【问题描述】:

这是我目前的代码

    $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); 收到错误

我还应该尝试什么?

【问题讨论】:

    标签: php mysql pdo laravel-3


    【解决方案1】:

    我想出了一个解决方法:

    $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");
    

    【讨论】:

      【解决方案2】:

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

      $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();
      

      编辑:

       $piv = "SET @pivot_query = NULL;
               SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(custom_field = \"\"',custom_field,\"\"', cf_values, NULL)) AS ',custom_field)) INTO @pivot_query FROM custom_fields_values; 
               SET @pivot = CONCAT('SELECT subscriber_id, ', @pivot_query, ' FROM custom_fields_values GROUP BY subscriber_id');
               SET @sql = CONCAT('SELECT * FROM user_data_3 LEFT JOIN (',@pivot,') piv ON user_data_5.aw_id = piv.subscriber_id');
               PREPARE stmt FROM @sql; 
               EXECUTE stmt;
               DEALLOCATE PREPARE stmt;";
      

      【讨论】:

      • 已经尝试过了,但它也不起作用 - 我遇到了同样的错误。
      • 新错误 - “SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册以获取正确的语法以在附近使用'SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(custom_field = ""',custom_field,""',' at line 1" 我在两个地方都用 '' 替换了 "" ,但我又遇到了错误。顺便说一句,我在网上找到了这个查询。
      • 这是我从中获取查询的地方:stackoverflow.com/questions/12598120/…
      • 删除了 setAttribute,尝试了新的查询,但不再工作,语法错误(带引号的东西)和以前一样。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      相关资源
      最近更新 更多