0
合并的结果我有一个存储的客户像这样的表:如何计算记录在MySQL和PHP
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");
然后在PHP将它们合并为我之前问HERE,像这样:
$result = array_replace_recursive($today, $this_month, $yet);
所以,我就可以循环到结果并打印我的HTML表格。
但这里有逻辑问题。一切正常,但一个月的结果是错误的数字,例如,一个人创建的所有链接都是1,但它在月度计数器中显示为4!我也尝试在SQL查询中使用RIGHT JOIN来获取所有客户端,因此PHP中的array_replace_recursive可以正常工作,因为我认为它目前无法正常工作,但没有成功,并且又得到了错误的结果。
任何人都可以告诉我一种完成工作的方法吗?
只是以供将来参考你应该添加一个SQLFiddle尽可能对数据库的东西。真正节省时间,让你更快得到答案。 – Jhecht 2015-03-02 07:07:51