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

时间:2015-03-02 06:36:20

标签: php mysql sql

我有一个存储这样的客户的表:

id    name
--    ----
1     John
2     Jane
...

我还有另一个表存储客户创建的链接:

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表格中显示统计数据。我想我可以尽可能少地编码:

$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");

然后在我之前问HERE之前将它们合并到PHP中,就像这样:

$result = array_replace_recursive($today, $this_month, $yet);

所以我能够循环到结果并打印我的HTML表格。

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

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

1 个答案:

答案 0 :(得分:0)

此查询应该在今天进行

$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"