Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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
Php 尝试基于不同的表打印写入计数查询循环_Php_Mysql_Sql_Group By_Count - Fatal编程技术网

Php 尝试基于不同的表打印写入计数查询循环

Php 尝试基于不同的表打印写入计数查询循环,php,mysql,sql,group-by,count,Php,Mysql,Sql,Group By,Count,我有两张桌子: access(name, id, check, key) events(name, key, event_name) 我正在尝试将这些表中的一些内容打印到包含以下列的php/html表中: name, key, event_name, access count 我的问题是,我希望每个事件都显示具有相同键的访问行的计数 事件表示例: name key event_name test 1 first joe 2 second 和访问表 name id chec

我有两张桌子:

access(name, id, check, key)

events(name, key, event_name)
我正在尝试将这些表中的一些内容打印到包含以下列的php/html表中:

name, key, event_name, access count
我的问题是,我希望每个事件都显示具有相同键的访问行的计数

事件表示例:

name  key  event_name
test  1  first
joe  2  second
和访问表

name  id  check  key
test  123  yes  1
test  1235  yes  1
joe  175  yes  2
joe  852  yes  2
test  5843  yes  1
test  123455  yes  1
我希望生成的表如下所示:

name  key  event_name  access count
test  1  first  4
joe  2  second  2
有人知道怎么做吗?我已经了解了这一点,但它显然不起作用,因为该键没有提供给内部select查询

select event_name, name, key, 
       (SELECT COUNT(key) FROM access WHERE key=key AND name=name) 
from event;

谢谢大家的关注,并可能有任何想法!我已经盯着这个和w3schools看了几个小时了

目前,您的子查询将返回所有行的计数,因为它与主查询不相关,因此key in key=key的两次出现都将引用同一列,并且name的表达式也将始终为true。要关联子查询,请添加表引用:

select event_name, name, key, 
       (SELECT COUNT(key) FROM access a WHERE a.key=e.key AND a.name=e.name) AS `access count`
from event e

目前,子查询将返回所有行的计数,因为它与主查询不相关,因此两次出现的key in key=key将引用同一列,并且对于name,表达式将始终为true。要关联子查询,请添加表引用:

select event_name, name, key, 
       (SELECT COUNT(key) FROM access a WHERE a.key=e.key AND a.name=e.name) AS `access count`
from event e

您还可以通过连接和聚合获得相同的结果:

select e.name, e.key, e.event_name, count(*) access_count
from event e
left join access a on a.key = e.key and a.name = e.name
group by e.name, e.key, e.event_name

您还可以通过连接和聚合获得相同的结果:

select e.name, e.key, e.event_name, count(*) access_count
from event e
left join access a on a.key = e.key and a.name = e.name
group by e.name, e.key, e.event_name

谢谢你@Nick的解释。这很有意义,指定哪个键是哪个键以及所有键。我修改了我的查询,当我在HeidiSQL中运行它时,我得到了我想要的结果。出于某种原因,当我将精确的查询复制/粘贴到php代码中时,该表正在填充除计数之外的所有内容的正确值,这两个单元格中的每一个都显示为1,而不是计数2和4。我还有一个晚上的问题!感谢您的帮助。@Amarotica很奇怪,它可以直接在SQL中工作,但不能在PHP中工作。是时候问另一个问题了?不管怎样,我很高兴我能帮上忙。结果我只是需要好好休息一下。我遇到的PHP问题是因为我将测试数据输入到托管数据库中,而不是我为测试设置的本地数据库,因此给了我一个错误的问题,即我看到的输出是错误的。facepalm@Amarotica去过那里,做了那件事!我很高兴事情很简单…谢谢你@Nick的解释。这很有意义,指定哪个键是哪个键以及所有键。我修改了我的查询,当我在HeidiSQL中运行它时,我得到了我想要的结果。出于某种原因,当我将精确的查询复制/粘贴到php代码中时,该表正在填充除计数之外的所有内容的正确值,这两个单元格中的每一个都显示为1,而不是计数2和4。我还有一个晚上的问题!感谢您的帮助。@Amarotica很奇怪,它可以直接在SQL中工作,但不能在PHP中工作。是时候问另一个问题了?不管怎样,我很高兴我能帮上忙。结果我只是需要好好休息一下。我遇到的PHP问题是因为我将测试数据输入到托管数据库中,而不是我为测试设置的本地数据库,因此给了我一个错误的问题,即我看到的输出是错误的。facepalm@Amarotica去过那里,做了那件事!我很高兴这是件简单的事。。。