Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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使用列的总和连接表_Mysql_Sql - Fatal编程技术网

MySql使用列的总和连接表

MySql使用列的总和连接表,mysql,sql,Mysql,Sql,我一共有三张桌子 包含列category\u id和category\u name的category 包含服务器id、类别id、服务器名称和服务器url列的服务器 服务器命中,包括列id、服务器id、命中计数、日期 在server_hit表中,我存储了一个web 每天都在访问服务器。在day_date一栏我是 此格式的行程日期YYYYMMDD,其中YYYY是四位数字 年份号,MM为两位数的月份号,DD为两位数的月份号 日期号码 在server_hit表中插入数据时,如果没有行 创建日期相同,然后

我一共有三张桌子

包含列category\u id和category\u name的category 包含服务器id、类别id、服务器名称和服务器url列的服务器 服务器命中,包括列id、服务器id、命中计数、日期 在server_hit表中,我存储了一个web 每天都在访问服务器。在day_date一栏我是 此格式的行程日期YYYYMMDD,其中YYYY是四位数字 年份号,MM为两位数的月份号,DD为两位数的月份号 日期号码

在server_hit表中插入数据时,如果没有行 创建日期相同,然后首先创建一行,然后插入 表中的数据

现在我想要的是服务器表中所有服务器的列表,其中包含以下列。如果服务器命中表中不存在行,则总命中计数应设置为0

服务器表中的服务器\u id 服务器表中的服务器名称 服务器\服务器表中的url 服务器表中的类别\u id 类别表中的类别名称,条件为server.category\u id=category.category\u id 来自服务器命中的总命中数,它是特定服务器id的所有命中数列的总和。 我怎样才能得到如上所述的列表?我试过与GROUP BY合作,但没能成功

任何话都将被真诚接受。提前谢谢

编辑:这是我到目前为止使用的查询
如果我理解正确,我相信下面的方法应该有效

关键是发出左连接,这样即使服务器\命中表中没有匹配记录的服务器也会显示在最终输出中,但总和为0

选择s.server\u id、s.server\u name、s.server\u url、s.category\u id、c.category\u name、IFNULLSUMsh.hit\u count、0 从服务器 s.category\u id=c.category\u id上的内部联接类别c 左加入服务器\u点击s.server\u id=sh.server\u id上的sh 按s.server\u id、s.server\u名称、s.server\u url、s.category\u id、c.category\u名称分组 如果存在,则添加以处理空问题


选择不同的s.server\u id、s.server\u名称、s.server\u url、s.category\u id、c.category\u名称,如果存在,请从服务器\u hit中选择id,其中sh.server\u id=s.server\u id,SUMsh.hit\u计数,0作为“总\u hit\u计数” 从服务器 s.category\u id=c.category\u id上的内部联接类别c 左加入服务器\u点击s.server\u id=sh.server\u id组,按s.server\u id、s.server\u名称、s.server\u url、s.category\u id、c.category\u名称
我们能看到你迄今为止所做的最大努力吗?嗨,我在问题中提出了我的疑问。请检查editsh.hit_count对于一个列来说是一个不幸的名称。我添加了DISTINCT关键字,它给出了正确的行数,否则它会添加一些额外的行。但唯一的问题仍然是命中率。当该行存在于server\u hit表中时,它给出hit\u count的总数,否则默认为NULL。你能以某种方式将其设置为0吗?我已将IFNULL添加到select中,以强制将null设置为0。选择不同的s.server\u id、s.server\u名称、s.server\u url、s.category\u id、c.category\u名称、IFEXISTSSELECT id FROM server\u hit其中sh.server\u id=s.server\u id、SUMsh.hit\u count,0作为服务器内部连接类别c中的“总\u命中次数”在s.category\u id=c.category\u id左连接服务器\u命中sh在s.server\u id=sh.server\u id组中按s.server\u id、s.server\u名称、s.server\u url、s.category\u id、c.category\u名称这是工作查询@基勒姆:谢谢
SELECT DISTINCT SERVER.*, category.category_name, IF(EXISTS(SELECT DISTINCT id FROM server_hit WHERE server_hit.server_id = SERVER.server_id), (SELECT SUM(hit_count) FROM server_hit WHERE server_hit.server_id = server.server_id GROUP BY server_id), 0) AS 'total_hit_count' FROM server, category, server_hit WHERE server.category_id = category.category_id GROUP BY server.server_id;