【问题标题】:How to select specific course by selecting course id and concatenate users all selected course with in same row如何通过选择课程 ID 来选择特定课程并将用户所有选定的课程与同一行连接起来
【发布时间】:2021-01-12 16:47:21
【问题描述】:

我正在将 users 表与 selected_course 表和 course 表与 selected_course 连接,我的要求是我想获得 course_id=2 的用户,并在同一行中使用用户选择的所有课程的连接来选择。

用户表

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();

【问题讨论】:

    标签: php mysql codeigniter join subquery


    【解决方案1】:

    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 是否相同。

    【讨论】:

    • 非常感谢您的宝贵回答,能否请您建议我如何编写完美的mysql查询(创造性的方式)有时在编写查询时卡住
    • 我也是来学习的,参与mysql之类的问题,每天看其他人的回答或者理解其他人的提问,你就会学习。
    • 如果你想问一些具体的问题,你可以让我知道。乐于助人
    • 这里有个小问题,得到 user_id=4 和 user_id=5 但是这个用户没有 course id=2
    • 在您的数据库中运行此查询,它将不包括 user_id = 4 和 5。如果是,请检查它们是否都将 selected_course 设置为 2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多