作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有如下所示的三个表:
测试用例
id project_id requirement_id
1 5 11,12
2 4 12,13
3 5 10,12
task_categories(引用带有 requirement_id 的 test_case 表)
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();
}
最佳答案
您当前的方法存在问题,因为它会导致在使用 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_case
和 task_categories
加入到一个子查询中,以获得 id
、project_id< 的所有组合
,以及他们的需求列表。然后我使用另一个 LEFT JOIN
从 projects
表中引入项目名称。
关于php - GROUP_CONCAT 不适用于 codeigniter 和 php 中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41662933/
我是一名优秀的程序员,十分优秀!