2012-06-05 6 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"문구를 처음부터 확인하십시오. 모든 조인/관계가 설정되고 인덱스가 Null이 아닌 경우이를 변경할 필요가 없습니다.

+0

괜찮습니다. 쿼리 결과를 보려면 어떻게해야합니까? 현재 foreach를 사용하여 결과를 반복합니다. – Sneaksta