我该怎么做这个查询?

时间:2013-07-23 10:48:27

标签: php mysql database

我有一个系统设置,用户可以订阅其他人和课程。所以john可能会跟随sally,但也会跟着MATH 125这样的课程。无论如何,这是我的表格设置方式

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

users
id | email | name |
-------------------

user_courses (shows relationship between an user and a course)
user_id | CRN
-------------

followers
follower | followee | id
-------------------------

course_updates
id | CRN | timestamp | action | user_id
---------------------------------------

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

$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。有任何帮助进行此查询吗?谢谢。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

希望这会对你有所帮助。

答案 2 :(得分:0)

您的基本查询应该有效,这表明它可能是数据问题。

使用更易读的连接语法:

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 = ? 

你可以发布一些测试数据(或者只是在SQL小提琴上设置它)