我的数据库中有三个表,请参阅下面的结构:
用户

uid | fname | date_joined
---------------------------------
 1  | john  | 2013-08-25 01:00:00
 2  | rock  | 2013-08-26 01:00:00
 3  | jane  | 2013-08-27 01:00:00

问题
qid | uid
----------
 1  |  1
 2  |  1
 3  |  2
 4  |  3
 5  |  3
 6  |  1
 7  |  1
 8  |  2
 9  |  2

追随者
fid | qid
---------
 1  |  2
 2  |  1
 3  |  2
 4  |  1
 5  |  2
 6  |  3
 7  |  2

用户表包含所有与用户相关的字段
问题表包含具有外键uid的所有问题相关数据
followers表存储问题出现的次数信息
我要返回的查询是:
unique uid,
fname
question count for each user
follower count for each user

我已经写了一个查询,它的工作正常,并返回我想要的记录,但追随者计数总是0。我的问题是:
SELECT
    u.uid, u.fname, u.date_joined ,
    (SELECT COUNT(*) FROM questions WHERE questions.uid = u.uid) AS question_count,
    (SELECT COUNT(*) FROM followers WHERE followers.qid IN (
        SELECT GROUP_CONCAT(qid) FROM questions WHERE questions.uid = u.uid
        )
    ) AS follow_count
FROM epc_user AS u
ORDER BY follow_count DESC, question_count DESC, date_joined DESC

我尝试了几种不同的组合,但都没有成功,可能是我编写了一个错误的查询,或者不可能在另一个子查询中使用子查询,不管它是什么。我只想知道是否有可能

最佳答案

GROUP_CONCAT将返回一个字符串,但是IN运算符使用一组值,而不是字符串,因此您必须使用以下内容

   SELECT
        u.uid, u.fname, u.date_joined ,
        (SELECT COUNT(*) FROM questions WHERE questions.uid = u.uid) AS question_count,
        (SELECT COUNT(*) FROM followers WHERE followers.qid IN (
            SELECT qid FROM questions WHERE questions.uid = u.uid
            )
        ) AS follow_count
    FROM users AS u
    ORDER BY follow_count DESC, question_count DESC, date_joined DESC

小提琴:http://sqlfiddle.com/#!2/8cd10/2

09-04 11:35
查看更多