2013-07-23 113 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