Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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 根据两行计算SQL结果_Php_Mysql_Sql_Database - Fatal编程技术网

Php 根据两行计算SQL结果

Php 根据两行计算SQL结果,php,mysql,sql,database,Php,Mysql,Sql,Database,下面是我的SQL结构示例: magazines magazines.id magazines.templateId magazines.userId 我想计算用户使用特定模板id的次数 考虑3个模板id:100、101和102,考虑5个用户10、20、30、40、50。下面是SQL数据的一个示例: magazines 1, 100, 10 2, 100, 20 3, 100, 30 这里,3个不同的用户拥有模板100。但是查询的结果

下面是我的SQL结构示例:

magazines
     magazines.id
     magazines.templateId
     magazines.userId
我想计算用户使用特定模板id的次数

考虑3个模板id:100、101和102,考虑5个用户10、20、30、40、50。下面是SQL数据的一个示例:

magazines
     1, 100, 10
     2, 100, 20
     3, 100, 30
这里,3个不同的用户拥有模板100。但是查询的结果应该是[100=1],因为它是不同的用户。另一方面,如果我有:

magazines
     1, 100, 10
     2, 100, 10
我应该有templateId[100=2]


我尝试了多次使用GROUPBY和UNIQUE、BY查询,结果完全错误。如果有人可以帮助,谢谢。

如果您希望用户使用模板的最大次数:

select templateid, userid, count(*)
from magazines m
where temploateid = X
group by templateid, userid
order by count(*) desc
limit 1;
SELECT
  templateId,
  userId,
  COUNT(id) as cnt
FROM
  Magazines GROUP BY templateId, userId
编辑:

通过两次聚合,您可以得到您想要的:

select templateid, cnt, count(*) as numUsers
from (select templateid, userid, count(*) as cnt
      from magazines m
      where temploateid = X
      group by templateid, userid
     ) tu
group by templateid, cnt
order by templateid, cnt;

这将获得每个用户使用特定模板的次数:

select templateid, userid, count(*)
from magazines m
where temploateid = X
group by templateid, userid
order by count(*) desc
limit 1;
SELECT
  templateId,
  userId,
  COUNT(id) as cnt
FROM
  Magazines GROUP BY templateId, userId
如果您的表包含以下数据:

  (1, 100, 10),
  (2, 100, 10),
  (3, 100, 20),
  (4, 100, 30)
那么您的结果集将是:

templateId  userId  cnt
100         10      2
100         20      1
100         30      1

谢谢这是一条很好的赛道。事实上,我需要我的模板使用计数。模板1,使用一次=X个用户,使用两次=X个用户,依此类推到20。是否可以更新查询?谢谢