簡體   English   中英

如何在MySQL中計算記錄並在PHP中合並結果

[英]How to count records in MySQL and merge results in 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中,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM