Mysql 一次查询中的多个计数
我有三张这样的桌子:Mysql 一次查询中的多个计数,mysql,select,count,Mysql,Select,Count,我有三张这样的桌子: SELECT username, (SELECT COUNT(m.sendby) FROM manga m WHERE m.sendby= u.userid) AS manga, (SELECT COUNT(c.sendby) FROM chapter c WHERE c.sendby= u.userid) AS chapter, (SELECT COUNT(t.sendby) FROM chapter t WHERE t.translator= u.username)
SELECT username,
(SELECT COUNT(m.sendby) FROM manga m WHERE m.sendby= u.userid) AS manga,
(SELECT COUNT(c.sendby) FROM chapter c WHERE c.sendby= u.userid) AS chapter,
(SELECT COUNT(t.sendby) FROM chapter t WHERE t.translator= u.username) AS translator,
(SELECT COUNT(g.sendby) FROM chapter g WHERE g.graphic= u.username) AS graphic
FROM USER u
WHERE userid=1
漫画
查普勒
| id | sendby | translator | graphic
-------------------------------------------
| 1 | 1 | admin | other
| 2 | 1 | admin | other
| 3 | 1 | admin | admin
| 4 | 1 | other | admin
使用者
我试图数一数我发过的东西,但结果不正确
我尝试了以下问题:
SELECT username,
SUM(
CASE WHEN m.sendby = u.userid
THEN 1 ELSE 0 END
) AS manga,
SUM(
CASE WHEN c.sendby = u.userid
THEN 1 ELSE 0 END
) AS chapter,
SUM(
CASE WHEN c.translator = u.username
THEN 1 ELSE 0 END
) AS translator,
SUM(
CASE WHEN c.graphic = u.username
THEN 1 ELSE 0 END
) AS graphic
FROM user u
left JOIN manga m
ON m.sendby = u.userid
left JOIN chapter c
ON c.sendby = u.userid
where u.userid = '1'
但这是不正确的:
漫画:16,
第16章,
译者:12,
图:8您是否有意使用
左连接?你知道这是怎么回事吗?
两次使用它使select在16行结果表上运行。
首先尝试选择所有结果(*),然后修复FROM
子句以返回要从中选择的所需数据
从您的评论来看,您似乎不想使用它。以下是对此的查询
select
m.id,
count(m.sendby) as Manga,
lc.Chapter,
rc.Translater,
c.Grafix
from manga as m
left join (select sendby, count(sendby) as Chapter from chaprer) as lc on lc.sendby = m.sendby
left join (select sendby, count(translater) as Translater from chaprer where translater = 'admin') as rc on rc.sendby = m.sendby
left join (select sendby, count(graphics) as Grafix from chaprer where translater = 'admin') as c on c.sendby = m.sendby
编辑
我已经测试了这个查询,并得到了这个结果
Query Result
id Manga Chapter Translater Grafix
1 4 4 3 3
一种直接的方法是这样做:
SELECT username,
(SELECT COUNT(m.sendby) FROM manga m WHERE m.sendby= u.userid) AS manga,
(SELECT COUNT(c.sendby) FROM chapter c WHERE c.sendby= u.userid) AS chapter,
(SELECT COUNT(t.sendby) FROM chapter t WHERE t.translator= u.username) AS translator,
(SELECT COUNT(g.sendby) FROM chapter g WHERE g.graphic= u.username) AS graphic
FROM USER u
WHERE userid=1
如果运行以下命令,您将在原始查询中看到问题:
SELECT *
FROM USER u
LEFT JOIN manga m
ON m.sendby = u.userid
LEFT JOIN chapter c
ON c.sendby = u.userid
WHERE u.userid = '1'
左连接返回重复的行。它是:manga:4,第4章,translator:3,graphic:2这是依赖查询,需要比左连接查询更多的执行时间。很抱歉,我不推荐这种方法。运行4个不同的查询并不是SQL的最佳实践……这要视情况而定。OP是基于1个用户ID进行查询的,这种方法非常好。
SELECT *
FROM USER u
LEFT JOIN manga m
ON m.sendby = u.userid
LEFT JOIN chapter c
ON c.sendby = u.userid
WHERE u.userid = '1'