2013-06-26 122 views
0

我在我的查詢中有2個選擇語句,聚合計數和左連接組合2個表給我一些我無法訪問的信息。我知道我可以創建一個臨時表作爲這兩個查詢,然後將它們連接到一個共同的行上,在這種情況下,它將是用戶標識。我只想知道是否有辦法在一個查詢中執行此操作。如何加入選擇和加入選擇到一個查詢

我的查詢如下:

SELECT usr, COUNT(quiz_id) 
AS count 
FROM edo_plugin_slickquiz_scores 
WHERE usr_practice = 123456 
GROUP BY usr; 

給了我下面的

USR COUNT 
6  1 
7  1 

我的第二個查詢

SELECT a.user_id, a.meta_value, b.user_nicename 
FROM edo_usermeta a LEFT JOIN edo_users b 
ON a.user_id = b.id 
WHERE a.meta_key = 'user_practice_role'; 

給了我下面的

User_id meta_value user_nicename 
----------------------------------- 
    6 | 5 | richbai90 
    5 | 1 | hi5 
    8 | 0 | man 
    7 | 1 | testing123 

由於wordpress設置了他們的usermeta表,WHERE子句最後是絕對必要的。如果你熟悉WordPress的,你會明白,這個表如下所示

umeta_id user_id  meta_key  meta_value 
-------------------------------------------------- 
    1  | 1 |  first_name | bob  
    2  | 1 |  last_name | builder 
    3  | 1 |  nickname | bob 

所以我只是想從這個表,其中meta_key是=值user_practice_role

是我理解的方式這是最好的方式嗎?

回答

1

至於我可以告訴你並不需要一個臨時表中的所有,你可以簡單地用一個更加入你的第二個查詢:

SELECT a.user_id, a.meta_value, b.user_nicename, COUNT(sc.quiz_id) AS Quizes 
FROM edo_usermeta a 
     LEFT JOIN edo_users b 
      ON a.user_id = b.id 
     LEFT JOIN edo_plugin_slickquiz_scores sc 
      ON sc.usr = b.id 
      AND sc.usr_practice = 123456 
WHERE a.meta_key = 'user_practice_role' 
GROUP BY a.user_id, a.meta_value, b.user_nicename; 
+0

我改變了第二LEFT JOIN加盟因爲我只想在最終結果中找到匹配的元素,但這是完美的。 – richbai90

0

左連接反對子選擇?

SELECT a.user_id, a.meta_value, b.user_nicename, Sub1.QuizCount 
FROM edo_usermeta a 
LEFT JOIN edo_users b 
ON a.user_id = b.id 
LEFT JOIN 
(
    SELECT usr, COUNT(quiz_id) AS QuizCount 
    AS count 
    FROM edo_plugin_slickquiz_scores 
    WHERE usr_practice = 123456 
    GROUP BY usr; 
) Sub1 
ON a.user_id = Sub1.usr 
WHERE a.meta_key = 'user_practice_role';