如何通过 selecting 课程 ID select 特定课程并将用户所有 selected 课程与同一行连接起来

How to select specific course by selecting course id and concatenate users all selected course with in same row

我正在加入用户 table selected_course table 和课程 table selected_course,我的要求是我想让那些用户 course_id=2 并在同一行 select 中,使用用户 select 编辑的所有课程的串联。

用户table

id   name
1     user_1

2     user_2

user_education_details

id      user_id  education_id  selected_course  

1        1          1               2

2        2          1               2

3        1          2               4

4        3          1               2


5        3          2               4

实际要求:

user_id   required_course     user_all_courses    course_name


1             2                      2,4            a,b

2             2                      2               a

3             2                     2,4             a,b

使用 codeigniter 查询格式:

$this->db->select('users.*');
$this->db->from('users');
$this->db->join('selected_course sc','c.user_id=users.id');
$this->db->join('course c','c.id=sc.selected_course');
$this->db->where('sc.selected_course',$course_id=2);
$this->db->get()->result();

HAVING 子句正是您要找的。要根据组过滤数据,请使用此子句。

SELECT 
    ued.user_id, 
    2 AS required_course,   -- passed course id
    GROUP_CONCAT(ued.selected_course) AS user_all_courses, 
    GROUP_CONCAT(c.name) course_name
FROM user_education_details ued
INNER JOIN courses c ON ued.selected_course = c.id
GROUP BY user_id
HAVING SUM(IF(selected_course = 2, 1,0)) > 0;

Output:

| user_id | required_course | user_all_courses | course_name | 
| 1       | 2               | 4,2              | b,a         | 
| 2       | 2               | 2                | a           | 
| 3       | 2               | 2,4              | a,b         | 

您还可以通过在 GROUP_CONCAT 中使用 ORDER BY 子句来订购 user_all_coursescourse_name。这是一个例子。

GROUP_CONCAT(ued.selected_course ORDER BY selected_course ASC) AS user_all_courses, 

现在您可以快速将其转换为等效的 CodeIgniter 查询。

检查此工作 fiddle 是否相同。