如何通过 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_courses
和 course_name
。这是一个例子。
GROUP_CONCAT(ued.selected_course ORDER BY selected_course ASC) AS user_all_courses,
现在您可以快速将其转换为等效的 CodeIgniter 查询。
检查此工作 fiddle 是否相同。
我正在加入用户 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_courses
和 course_name
。这是一个例子。
GROUP_CONCAT(ued.selected_course ORDER BY selected_course ASC) AS user_all_courses,
现在您可以快速将其转换为等效的 CodeIgniter 查询。
检查此工作 fiddle 是否相同。