2012-06-05 170 views
1

所以我想獲得用戶花費在特定課程中測驗的時間。使用mysql連接多個表JOIN

這是我目前的代碼。

$study_time = "SELECT SUM(time) as study_time FROM user_quizzes 
         JOIN course_topic_badges ON course_topic_badges.id = user_quizzes.badge_id 
         JOIN course_topics ON course_topic_badges.topic_id = course_topics.id 
         JOIN courses ON course_topics.course_id = courses.id 
         WHERE user_id = ".$user_id." AND courses.id = ".$subject; 

這感覺就像一個可怕的查詢,得到我需要的東西。有沒有更好的方法來構建我的數據庫,或者運行這個不會如此史詩般的查詢?

謝謝!

+2

這個查詢是不是可怕的......當您的查詢中的行數進行測量,然後再談; ) – Jakub

+1

仍然適合在一個頁面上,沒有那麼糟糕:) – lanzz

+0

哈哈「仍然適合在一個頁面上,沒有那麼糟糕」 - 非常令人放心:P – Sneaksta

回答

0

這並不可怕,但你可以通過添加別名壓縮了一點:

$study_time = "SELECT SUM(time) as study_time FROM user_quizzes uq 
    JOIN course_topic_badges ctb ON ctb.id = uq.badge_id 
    JOIN course_topics ct ON ctb.topic_id = ct.id 
    JOIN courses c ON ct.course_id = c.id 
    WHERE user_id = ".$user_id." AND c.id = ".$subject; 
+0

感謝隊友,我會接受這個答案。 :) – Sneaksta

0

在開始時用「Explain」語句檢查您的查詢。如果所有連接/關係都已設置且索引不爲空,則不需要更改它。

+0

沒關係。如何查看查詢的結果?目前,它通過結果與foreach循環 – Sneaksta