Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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中统计记录并在PHP中合并结果_Php_Mysql_Sql - Fatal编程技术网

如何在MySQL中统计记录并在PHP中合并结果

如何在MySQL中统计记录并在PHP中合并结果,php,mysql,sql,Php,Mysql,Sql,我有一个存储客户的表,如下所示: id name -- ---- 1 John 2 Jane ... $today = $this->db->query("SELECT COUNT(*) as today, c.id as client_id, c.name FROM `links` l JOIN `clients` c ON l.client_id = c.id WHERE DATE(l.created) = CURDATE() GROUP BY c.

我有一个存储客户的表,如下所示:

id    name
--    ----
1     John
2     Jane
...
$today = $this->db->query("SELECT COUNT(*) as today, c.id as client_id, c.name FROM `links` l JOIN `clients` c ON l.client_id = c.id WHERE DATE(l.created) = CURDATE() GROUP BY c.id");

$this_month = $this->db->query("SELECT COUNT(*) as this_month, c.id as client_id, c.name FROM `links` l JOIN `clients` c ON l.client_id = c.id WHERE YEAR(l.created) = YEAR(NOW()) AND MONTH(l.created) = MONTH(NOW()) GROUP BY c.id");

$yet = $this->db->query("SELECT COUNT(*) as yet, c.id as client_id, c.name FROM `links` l JOIN `clients` c ON l.client_id = c.id WHERE GROUP BY c.id");
$result = array_replace_recursive($today, $this_month, $yet);
我还有另一个存储客户端创建的链接的表:

id    client_id    link    created
--    ---------    ----    -----------
1     1            ...     2015-02-01
2     1            ...     2015-02-26
3     1            ...     2015-03-01
4     2            ...     2015-03-01
5     2            ...     2015-03-02
6     2            ...     2015-03-02
我需要找出有多少链接,一个客户已经创建了今天,这个月和所有的时间。我还需要在结果中输入它们的名称,这样我就可以创建一个HTML表来显示统计信息。我想我可以像这样尽可能少地编写代码:

id    name
--    ----
1     John
2     Jane
...
$today = $this->db->query("SELECT COUNT(*) as today, c.id as client_id, c.name FROM `links` l JOIN `clients` c ON l.client_id = c.id WHERE DATE(l.created) = CURDATE() GROUP BY c.id");

$this_month = $this->db->query("SELECT COUNT(*) as this_month, c.id as client_id, c.name FROM `links` l JOIN `clients` c ON l.client_id = c.id WHERE YEAR(l.created) = YEAR(NOW()) AND MONTH(l.created) = MONTH(NOW()) GROUP BY c.id");

$yet = $this->db->query("SELECT COUNT(*) as yet, c.id as client_id, c.name FROM `links` l JOIN `clients` c ON l.client_id = c.id WHERE GROUP BY c.id");
$result = array_replace_recursive($today, $this_month, $yet);
然后像我之前问的那样在PHP中合并它们,如下所示:

id    name
--    ----
1     John
2     Jane
...
$today = $this->db->query("SELECT COUNT(*) as today, c.id as client_id, c.name FROM `links` l JOIN `clients` c ON l.client_id = c.id WHERE DATE(l.created) = CURDATE() GROUP BY c.id");

$this_month = $this->db->query("SELECT COUNT(*) as this_month, c.id as client_id, c.name FROM `links` l JOIN `clients` c ON l.client_id = c.id WHERE YEAR(l.created) = YEAR(NOW()) AND MONTH(l.created) = MONTH(NOW()) GROUP BY c.id");

$yet = $this->db->query("SELECT COUNT(*) as yet, c.id as client_id, c.name FROM `links` l JOIN `clients` c ON l.client_id = c.id WHERE GROUP BY c.id");
$result = array_replace_recursive($today, $this_month, $yet);
因此,我将能够循环到结果中并打印我的HTML表

但这里有一些逻辑问题。一切正常,但一个月的结果是一个错误的数字,例如,一个人的整个创建链接是1,但它在每月计数器中显示4!我还尝试在SQL查询中使用RIGHT JOIN来获取所有客户机,因此PHP中的array_replace_recursive可以正常工作,因为我认为它目前无法正常工作,但没有成功,并且再次得到错误的结果


有人能告诉我一种完成这项工作的方法吗?

这个查询今天就可以了

$query_today="
SELECT name, id AS user_id, (
 SELECT COUNT( * ) 
 FROM  links 
 WHERE client_id = user_id AND created = '2015-03-02'
) AS alllinks
FROM clients"
将子查询中的WHERE子句调整为月份和所有月份

$query_month="
SELECT name, id AS user_id, (
 SELECT COUNT( * ) 
 FROM  links 
 WHERE client_id = user_id AND created like '2015-03%'
) AS alllinks
FROM clients"

$query_all="
SELECT name, id AS user_id, (
 SELECT COUNT( * ) 
 FROM  links 
 WHERE client_id = user_id
) AS alllinks
FROM clients"

为了便于将来参考,您应该尽可能为数据库内容添加SQLFIDLE。真的节省了人们的时间,让你更快地得到答案。