【问题标题】:Trying to write count query loop based on a different table printing尝试根据不同的表打印编写计数查询循环
【发布时间】:2020-08-01 11:51:43
【问题描述】:

我有两张桌子:

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 event_name, name, key, 
       (SELECT COUNT(key) FROM access WHERE key=key AND name=name) 
from event;

感谢任何看过并可能有任何想法的人!我已经盯着这个和 w3schools 看了好几个小时了

【问题讨论】:

    标签: php mysql sql group-by count


    【解决方案1】:

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

    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
    

    【讨论】:

    • 感谢@Nick 的解释。这很有意义,指定哪个键是哪个键和所有键。我修改了我的查询,当我在 HeidiSQL 中运行它时,我得到了我想要的结果。出于某种原因,当我将确切的查询复制/粘贴到我的 php 代码中时,该表正在填充除计数之外的所有内容的正确值,现在在两个单元格中的每个单元格中都显示为“1”,而不是计数“2”和“4”。对我来说又是一个晚上的问题!感谢您的帮助。
    • @Amarotica 很奇怪,它可以直接在 SQL 中工作,但不能在 PHP 中工作。是时候问另一个问题了?无论如何,我很高兴能在这方面提供帮助。
    • 原来我只需要好好休息一晚。我遇到的“PHP 问题”是因为我将测试数据输入到我的托管数据库中,而不是我为测试设置的本地数据库,因此给了我一个错误的问题,即我看到的输出是错误的。 掌心
    • @Amarotica 去过那里,做到了!我很高兴这很简单......
    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      相关资源
      最近更新 更多