0

我有一个系统设置,用户可以订阅其他人以及课程。所以约翰可能会关注莎莉,但也会关注数学 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。任何帮助进行此查询?谢谢你。

4

3 回答 3

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
于 2013-07-23T12:26:34.790 回答
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

希望这会帮助你。

于 2013-07-23T11:13:12.483 回答
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 小提琴上设置)

于 2013-07-23T11:14:01.583 回答