0

我的查询中有 2 个 select 语句、一个聚合计数和一个左连接,它组合了 2 个表,为我提供了一些我无法访问的信息。我知道我可以创建一个临时表作为这两个查询,然后将它们连接到一个公共行上,在这种情况下是用户 ID。我只想知道是否有办法在一个查询中做到这一点。

我的查询如下:

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 的值

我理解的方式是最好的方式吗?

4

2 回答 2

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;
于 2013-06-26T16:12:28.530 回答
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';
于 2013-06-26T16:11:03.250 回答