Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查询计数(字段)不考虑id_Mysql_Sql_Count_Inner Join_Aggregate Functions - Fatal编程技术网

Mysql 查询计数(字段)不考虑id

Mysql 查询计数(字段)不考虑id,mysql,sql,count,inner-join,aggregate-functions,Mysql,Sql,Count,Inner Join,Aggregate Functions,我有以下疑问: SELECT dtr_user.username, dtr_user.loggedin, dtr_user.profilepicture, dtr_siterank.siterankname, dtr_user.joindate, COUNT(fo

我有以下疑问:

         SELECT     dtr_user.username, 
                    dtr_user.loggedin, 
                    dtr_user.profilepicture, 
                    dtr_siterank.siterankname, 
                    dtr_user.joindate, 
                    COUNT(forum_post.postid), 
                    COUNT(dtr_entries.entreeid) 
            FROM    dtr_user, 
                    forum_post, 
                    dtr_entries, 
                    dtr_siterank 
            WHERE dtr_user.userid = ? 
            AND dtr_user.userid = dtr_entries.entreeauthor
            AND dtr_user.userid = forum_post.userid
            AND dtr_user.siterank = dtr_siterank.siterankid
所以我希望它能为我返回海报的posted.s的数量,和主菜id的数量一样

当我从forum_post运行
SELECT COUNT(forum_post.postid)时,其中forum_post.userid=1
返回正确的数字(17),与从dtr_entries.Entreautor=1的dtr_条目运行
SELECT COUNT(dtr_entries.EntreId)相同,后者返回
4

但在主查询中,两个数字都是
68
。我是否对此应用左联接?查询并不是我真正的爱好。

我想你想要:

SELECT  u.*, s.siterankname, 
    (SELECT COUNT(*) FROM forum_post fp WHERE fp.user_id = u.userid) cnt_forum_post,
    (SELECT COUNT(*) FROM dtr_entries e WHERE e.entreeauthor = u.user_id) cnt_dtr_entries
FROM dtr_user u
INNER JOIN dtr_siterank s ON s.siterankid = u.siterank
WHERE u.userid = ? 
理由:

  • 您的原始代码不是有效的聚合查询;您需要一个
    groupby
    子句,该子句应与
    SELECT
    子句一致

  • 但即便如此,如果在
    forum\u post
    dtr\u条目
    表中,每个用户都有几个匹配项,那么结果将是错误的;为了避免这种情况,我使用关联子查询来计算两个表中每个表中匹配项的数量(这避免了外部聚合的需要)

  • 我假设在
    dtr\u siterank
    中只有一个匹配项,并使用常规联接将列
    siterankame

注:

  • 不要使用隐式连接!几十年前,当显式连接(使用
    JOIN…ON
    关键字)成为标准时,这种旧语法(在
    FROM
    子句中使用逗号)就不受欢迎了

  • 表别名使查询更易于编写和读取


请阅读并做一个统计,因为每个帖子的连接返回4行,所以要乘以计数。也许您的意思是要进行
count(DISTINCT…
?COUNT()不带distinct只计算参数不为null的次数,这就是为什么两个ID相等的原因。感谢您的解释。是的。您是正确的,siterank中只能有一个结果。谢谢你的指点!我一定会用的