CakePHP 2.X - 设置MySQL GROUP_CONCAT_MAX_LEN

时间:2018-01-25 21:25:38

标签: php mysql sql cakephp group-concat

我找到了一种很好的方法来快速检索我需要使用MySQL group_concat非常棒的数据。但是,我有时会检索长串数据。如果只增加GROUP_CONCAT_MAX_LEN变量,那么这应该不是问题。

从MySQL命令行界面测试我的查询时,我能够这样做。但是我无法在CakePHP中正确配置它。我试过了:

  • 在我的查询之前添加SET GROUP_CONCAT_MAX_LEN = <very_big_value>;,但这不起作用。
  • 修改CakePHP的database.php配置文件,如下所示:

    class DATABASE_CONFIG {
        public $default = array(
            'datasource' => 'Database/Mysql',
            'persistent'    => false,
            'host'      => CONFUSEDBOY_DB_SERVER,
            'port'      => '',
            'login'     => CONFUSEDBOY_DB_USER,
            'password'  => CONFUSEDBOY_DB_PASSWORD,
            'database'  => CONFUSEDBOY_DB_NAME,
            'schema'    => '',
            'prefix'    => '',
            'encoding'  => '',
            'settings' =>array("GROUP_CONCAT_MAX_LEN"=>"20000000")
           );
        [...]
    }
    

这些都不起作用。知道如何实现我的目标吗?

有关信息,我使用的是CakePHP 2.3和MySQL 5.7。

编辑代码显示我在查询之前尝试使用SET的方法(来自名为Things的模型)

<?php

/* This class represents things */
class Things extends AppModel {

    var $name   = 'Things';
    var $useTable = 'things';

    function getThingsWithGroupConcat($user_id) {
        $summary = array();  // Array that store results and is returned at the end
        $query = "SET GROUP_CONCAT_MAX_LEN=20000000;SELECT [...]  group_concat(foo) from things where user_id = '".$user_id."' [...];";
        $res = $this->query($query);
        for($i=0;$i< count($res);$i++){
             // Process query results to populate `$summary`
        }
        // pr($summary);
        return($summary);
    }


}

0 个答案:

没有答案