2016-07-31 54 views
1

我有一個wordpress網站,用於在各種課程(從網站上的測驗)上存儲學生成績。我正在嘗試創建一個查詢,以便爲每個課程中的所有學生(使用buddypress小組)以及學生的成績提取所有課程。當價值是'等級'或它不存在時獲得結果

我創造了這個查詢:

SELECT u.display_name, p.post_title, cm.meta_value 
FROM wp_users u 
JOIN wp_bp_groups_members gm 
    ON u.ID = gm.user_id 
JOIN wp_comments c 
    ON u.ID = c.user_id 
JOIN wp_commentmeta cm 
    ON c.comment_ID = cm.comment_id 
JOIN (SELECT * FROM wp_posts WHERE post_type LIKE 'lesson') p 
    ON c.comment_post_id = p.ID 
WHERE gm.group_id = 4 AND cm.meta_key LIKE 'grade' 

目前這返回一組中的所有學生,他們都試圖測試的經驗教訓的所有成績。然而,它不會返回任何他們還沒有嘗試過的測試,我仍然需要這些測試。

要明確的是:課程是帖子,成績是元記錄中的meta_values,其中meta_key是「成績」。這些存儲爲評論和comment_meta。

我希望這一切都清楚,你可以提供幫助。謝謝。

奧利·瓊斯後幫我做了這個:

SELECT u.display_name, p.post_title, IFNULL(cm.meta_value,'--nothing--') grade 
FROM wp_users u 
JOIN wp_comments c 
LEFT JOIN wp_commentmeta cm 
    ON c.comment_ID = cm.comment_id AND cm.meta_key = 'grade' 
JOIN wp_bp_groups_members gm 
    ON u.ID = gm.user_id 
JOIN wp_posts p 
    ON c.comment_post_id = p.ID 
WHERE gm.group_id = 4 AND p.post_type LIKE 'lesson' 

幾乎工程,但返回組中的所有學生成績,不只是那些(儘管只給該組中的學生的一個名字) 。

回答

0

這是熟悉的鍵/值存儲問題,它出現commentmeta,postsmetausermeta。當你JOIN兩張表和左邊的可能沒有對應的行,你需要使用LEFT JOIN。當左邊的是鍵/值表時,您需要相應地調整ON條件。最後,當你的LEFT JOIN兩個表格中沒有匹配的行時,你可以返回NULLs這些列,所以你必須考慮到這一點。

所以這種SQL模式會爲你做

SELECT whatever, IFNULL(cm.meta_value,'--nothing--') grade 
    FROM whatever 
    LEFT JOIN wp_comments c ON whatever.id = c.user_id 
    LEFT JOIN wp_commentmeta cm ON c.comment_id = cm.comment_id 
          AND cm.meta_key = 'grade' 
    JOIN whatever 
+0

感謝您的幫助,它絕對讓我更接近。我已經添加了對我的問題的編輯,因爲它提出了一個問題。 – DanR

+0

我認爲這是正確的,因爲它使我找到了答案。我不得不離開加入wp_comments和wp_commentmeta。謝謝。 – DanR

+0

啊,謝謝你解決它。我更新了我的答案。 –

0

的伎倆是否有您的意見表中的user_id?我沒有看到你加入哪個用戶發佈了哪條評論。因此,當您將group_members加入users表時,您將指定要顯示哪些用戶,但由於您在加入評論表時未加入用戶ID,因此會顯示所有用戶的所有評論。林不知道這是否適用於您的桌子,但嘗試:

SELECT u.display_name, p.post_title, IFNULL(cm.meta_value,'--nothing--') grade 
FROM wp_users u 
LEFT JOIN wp_comments c 
    JOIN wp_commentmeta cm 
    ON c.comment_ID = cm.comment_id AND cm.meta_key = 'grade' 
    JOIN wp_bp_groups_members gm 
    ON c.user_ID = gm.user_id 
ON u.user_id = c.user_id 
JOIN wp_posts p 
ON c.comment_post_id = p.ID 
WHERE gm.group_id = 4 AND p.post_type LIKE 'lesson' 

希望這會有所幫助!

+0

這使我們回到最初的問題,不幸的是沒有顯示一個學生沒有嘗試過的課程。 – DanR

+0

也許你需要將註釋留下來,如果這是用戶ID保存的地方。我會在上面編輯我的答案。 – user6655061