2013-07-23 149 views
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); 

变量存在通过$通过在瓦尔当前登录用户的用户ID,任何使这个查询帮助?谢谢。

+0

是你的问题与MySQL或PHP? – Strawberry

+1

你想显示用户名,但你不从表'用户'中选择... –

+0

也许你应该将这个查询分开几个小而清晰的查询?并尝试使用LEFT JOIN。 –

回答

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 

希望这会对你有帮助。

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小提琴)

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 
+0

哇。我真的需要阅读这个加入的东西。谢谢! – user2605381

+0

'@ user26 ...'如果您发现此答案为“使用完整”,请将其标记为接受的答案。 – HybrisFreelance