我的数据库中有三个表,请参阅下面的结构:
用户
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