2017-01-14 50 views
0

我有四個表,我想要使用JOIN與表「pro_quiz_statistic_ref」結合使用。除了一張桌子外,所有的桌子都加入了,這就是「pro_quiz_stastic」。如何計算JOIN中的行數?

表「pro_quiz_statistic_ref」持有用戶參加了所有的測驗。

在pro_quiz_statistic有從每次測驗,當然有statistic_ref_id以確定其所屬的競猜答案10的記錄。 我想使用相同的statistic_ref_id來計算表「pro_quiz_statistic」中的「correct_count」列。

我有這個疑問:

$results_quiz = $pdo->query("SELECT 
    sr.statistic_ref_id, 
    sr.quiz_id, 
    sr.user_id, 
    sr.total_time, 
    qm.name AS q_name, 
    qm.category_id, 
    qm.subcategory_id, 
    sc.sub_category_id, 
    sc.sub_category_name AS quiz_type, 
    pl.time, 
    pl.points, 
    qs.correct_count AS count_correct 
    FROM pro_quiz_statistic_ref AS sr 
    JOIN pro_quiz_master qm ON qm.id = sr.quiz_id 
    JOIN pro_quiz_subcategory sc ON sc.sub_category_id = qm.subcategory_id 
    JOIN user_points_log pl ON pl.quiz_id = sr.quiz_id AND pl.user_id = '$get_id' 
    JOIN pro_quiz_statistic qs ON qs.statistic_ref_id = sr.statistic_ref_id 
    WHERE sr.user_id = '$get_id' ORDER BY qm.name ASC"); 

有了上面代碼中它打印出該用戶已參加了「pro_quiz_statistic」上市* 10個回答所有提問

我試圖把它寫像

COUNT(qs.correct_count) AS count_correct 

但它只打印出一行。 順便說一句:它也被user_id過濾。

我想使用JOIN的原因是因爲有更多的

有人可以幫助我?

問候

肯尼斯

-------- ---------修訂

我結束了本該是工作得很好:

$results_quiz = $pdo->query("SELECT 
    sr.statistic_ref_id, 
    sr.quiz_id, 
    sr.user_id, 
    sr.total_time, 
    qm.name AS q_name, 
    qm.category_id, 
    qm.subcategory_id, 
    sc.sub_category_id, 
    sc.sub_category_name AS quiz_type, 
    pl.time, 
    pl.points, 
    COUNT(qs.correct_count) AS count_correct 
    FROM pro_quiz_statistic_ref AS sr 
    JOIN pro_quiz_master qm ON qm.id = sr.quiz_id 
    JOIN pro_quiz_subcategory sc ON sc.sub_category_id = qm.subcategory_id 
    JOIN user_points_log pl ON pl.quiz_id = sr.quiz_id AND pl.user_id = '$get_id' 
    JOIN pro_quiz_statistic qs ON qs.statistic_ref_id = sr.statistic_ref_id 
    WHERE 
    sr.user_id = '$get_id' AND 
    qs.correct_count = '1' 
    GROUP BY  
    sr.statistic_ref_id, 
    qs.correct_count 
    ORDER BY qm.name ASC"); 

回答

0

如果你需要一個像數(..),你應該通過語句中使用一組聚合函數

$results_quiz = $pdo->query("SELECT 
     sr.statistic_ref_id, 
     sr.quiz_id, 
     sr.user_id, 
     sr.total_time, 
     qm.name AS q_name, 
     qm.category_id, 
     qm.subcategory_id, 
     sc.sub_category_id, 
     sc.sub_category_name AS quiz_type, 
     pl.time, 
     pl.points, 
     count(qs.correct_count)AS count_correct 
     FROM pro_quiz_statistic_ref AS sr 
     JOIN pro_quiz_master qm ON qm.id = sr.quiz_id 
     JOIN pro_quiz_subcategory sc ON sc.sub_category_id = qm.subcategory_id 
     JOIN user_points_log pl ON pl.quiz_id = sr.quiz_id AND pl.user_id = '$get_id' 
     JOIN pro_quiz_statistic qs ON qs.statistic_ref_id = sr.statistic_ref_id 
     WHERE sr.user_id = '$get_id' 
     GROUP BY  
     sr.statistic_ref_id, 
     sr.quiz_id, 
     sr.user_id, 
     sr.total_time, 
     qm.name, 
     qm.category_id, 
     qm.subcategory_id, 
     sc.sub_category_id, 
     sc.sub_category_name AS quiz_type, 
     pl.time, 
     pl.point 
     ORDER BY qm.name ASC"); 
+0

非常感謝你scaisEdge :-) – Kenneth

+0

@Kenneth我。看到你只是簡單地renoved一些(無用的專欄從組),以及如果我的回答是正確的,請將其標記爲已接受...看看這裏如何 http://meta.stackexchange.com/questions/5234/how-does-accepting -an-answer-work – scaisEdge

+0

這樣做..我已經發布了另一個問題,我已經與計數哪些與此有關:http://stackoverflow.com/questions/41656159/make-a-count-on-join-tables – Kenneth