【问题标题】:GROUP_CONCAT is not working with parameter in codeigniter and phpGROUP_CONCAT 不适用于 codeigniter 和 php 中的参数
【发布时间】:2017-05-30 11:56:06
【问题描述】:

我有三个表如下所示:

test_case

id   project_id     requirement_id
 1      5                11,12
 2      4                12,13
 3      5                10,12

task_categories(以 test_case 表和required_id 引用)

 id      name
 10     ten   
 11     eleven   
 12     twelve
 13     thirtien     

projects(用带有 project_id 的 test_case 表引用)

id    name
 4     P1        
 5     P2      

现在,我想通过传递 project_id=5 之类的参数来查询 where 条件,并希望输出如下所示:

id   project_name     requirement_name
 1      P2             eleven,twelve
 3      P2              ten,twelve

我在我的模型中尝试了以下代码:

public function display($project_id) {
    $sql = "
        SELECT i.id as id, i.project_id as project_id, requirement_id, GROUP_CONCAT(c.name SEPARATOR '\n <br>*') as req_name, p.id as projects_id FROM test_case i, task_categories c, projects p 
        WHERE FIND_IN_SET(c.id, i.requirement_id) AND i.project_id = $project_id
        GROUP BY i.id";

    $query = $this->db->query($sql);
    return $query->result();
}

【问题讨论】:

    标签: php mysql codeigniter methods parameters


    【解决方案1】:

    您当前的方法存在问题,因为它会导致在使用 GROUP BY 时选择非聚合列。这是一个应该有效的查询:

    SELECT t1.id,
           COALESCE(t2.project_name, 'NA') AS project_name,
           t1.req_name
    FROM
    (
        SELECT t.id,
               t.project_id,
               GROUP_CONCAT(tc.name SEPARATOR '\n <br>*') AS req_name
        FROM test_case t
        INNER JOIN task_categories tc
            ON FIND_IN_SET(tc.id, t.requirement_id) > 0
        GROUP BY t.id, t.project_id
    ) t1
    LEFT JOIN projects t2
        ON t1.project_id = t2.id
    

    在上述查询中,我将test_casetask_categories 连接到一个子查询中,以获得idproject_id 的所有组合及其需求列表。然后我使用另一个LEFT JOINprojects 表中引入项目名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 2014-08-15
      • 2018-01-27
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      • 2017-09-28
      相关资源
      最近更新 更多