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'