Php 我应该如何进行此查询?

Php 我应该如何进行此查询?,php,mysql,database,Php,Mysql,Database,我有一个系统,用户可以订阅其他人以及课程。因此,约翰可以跟随莎莉,但也可以学习数学125之类的课程。不管怎么说,我的桌子是这样摆放的 Courses CRN | id | course_number | subject | course_name | -------------------------------------------------- 我希望能够从这些表中构建一个新闻提要,显示用户名和课程信息,以及他们是否添加或删除了课程;然而,我很难做到这一点。到目前为止,我所有的尝

我有一个系统,用户可以订阅其他人以及课程。因此,约翰可以跟随莎莉,但也可以学习数学125之类的课程。不管怎么说,我的桌子是这样摆放的

Courses
CRN | id | course_number | subject | course_name |
--------------------------------------------------




我希望能够从这些表中构建一个新闻提要,显示用户名和课程信息,以及他们是否添加或删除了课程;然而,我很难做到这一点。到目前为止,我所有的尝试都返回空值。 这是我目前的尝试

$this->db->query("SELECT *
                  FROM courses, user_courses, course_updates
                  WHERE courses.crn = course_updates.crn
                  AND user_courses.crn = course_updates.crn
                  AND user_courses.user_id = ? ", $vars);
通过$vars传入的变量是当前登录用户的用户id。问这个问题有什么帮助吗?多谢各位

SELECT user_courses.*,courses.*,user.*,course_updates.* 
FROM 
    user_courses 
        INNER JOIN courses ON user_courses.CRN=courses.CRN
        INNER JOIN users ON user_courses.user_id =users.id
        INNER JOIN course_updates ON user_courses.CRN=course_updates.CRN
WHERE users.id=$id

希望这会对您有所帮助。

您的基本查询应该可以工作,这表明这可能是数据问题

使用更具可读性的联接语法:

SELECT *
FROM courses
    INNER JOIN course_updates ON courses.crn = course_updates.crn
    INNER JOIN user_courses ON user_courses.crn = course_updates.crn
    INNER JOIN users ON users.id = user_courses.user_id
WHERE users.id = ? 
您可以发布一些测试数据(或者只是在SQLFIDLE上设置它)

在这里,您可以找到所有有课程的用户,以及用户是否对任何课程执行任何操作

如果您发现微粒用户数据,请添加

WHERE users.id=$id

您的mysql或php有问题吗?您想显示用户名,但不从表“users”中选择……也许您应该将此查询分成几个小而清晰的查询?并尝试使用LEFT JOIN.mysql。是的。我简化了查询,试图让它工作起来。这就是为什么没有用户表的选择。我将尝试左连接。谢谢
@user26…
,如果您发现此答案已满,请将其标记为已接受答案。
$this->db->query("SELECT *
                  FROM courses, user_courses, course_updates
                  WHERE courses.crn = course_updates.crn
                  AND user_courses.crn = course_updates.crn
                  AND user_courses.user_id = ? ", $vars);
SELECT user_courses.*,courses.*,user.*,course_updates.* 
FROM 
    user_courses 
        INNER JOIN courses ON user_courses.CRN=courses.CRN
        INNER JOIN users ON user_courses.user_id =users.id
        INNER JOIN course_updates ON user_courses.CRN=course_updates.CRN
WHERE users.id=$id
SELECT *
FROM courses
    INNER JOIN course_updates ON courses.crn = course_updates.crn
    INNER JOIN user_courses ON user_courses.crn = course_updates.crn
    INNER JOIN users ON users.id = user_courses.user_id
WHERE users.id = ? 
SELECT user.name,
courses.* ,
if(course_updates.action IS NULL, 'No Action By User',CONCAT(user.name,' ',course_updates.action,' the ',(select course_name FROM user_courses WHERE user_courses.CRN=course_updates.CRN)))

FROM users 
INNER JOIN user_courses ON user_courses.user_id =users.id
INNER JOIN courses ON user_courses.CRN=courses.CRN
LEFT JOIN course_updates ON user_courses.user_id=users.id
WHERE users.id=$id