侵刪。不足之處請諒解。 工作中遇到的問題: 不會就百度,多百度幾次總會有自己需要的。比如這個曲線統計,我也是借用了博客里的各位大大,然後按照自己項目需求做的,頁面給前端懟數據去就行,下麵是步驟 1,用戶統計曲線圖,如果其中某一天沒有數據,曲線圖的日期鏈接不起來,如圖: 我的解決方法:靠百度。首先生成 ...
侵刪。不足之處請諒解。
工作中遇到的問題:
不會就百度,多百度幾次總會有自己需要的。比如這個曲線統計,我也是借用了博客里的各位大大,然後按照自己項目需求做的,頁面給前端懟數據去就行,下麵是步驟
1,用戶統計曲線圖,如果其中某一天沒有數據,曲線圖的日期鏈接不起來,如圖:
我的解決方法:靠百度。首先生成某個範圍的日曆表數據,再通過這個日曆表連接查詢需要統計數據表的數據,沒有的話,預設為 0;這樣就可以得出這個範圍內完整的數據了,所以這種方案,更適合這種需求的變化。
現在通過如下 sql 語句生成日曆表:
CREATE TABLE num (i int);-- 創建一個表用來儲存0-9的數字
INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);-- 生成0-9的數字,方便以後計算時間
CREATE TABLE if not exists calendar(datelist date); -- 生成一個存儲日期的表,datalist是欄位名
-- 這裡是生成並插入日期數據
INSERT INTO calendar(datelist) SELECT
adddate(
( -- 這裡的起始日期,你可以換成當前日期
DATE_FORMAT("1970-1-1", '%Y-%m-%d')
),
numlist.id
) AS `date`
FROM
(
SELECT
n1.i + n10.i * 10 + n100.i * 100 + n1000.i * 1000+ n10000.i * 10000 AS id
FROM
num n1
CROSS JOIN num AS n10
CROSS JOIN num AS n100
CROSS JOIN num AS n1000
CROSS JOIN num AS n10000
) AS numlist;
執行以下SQL測試:BETWEEN 取範圍值
SELECT COUNT(u.userID) AS num, c.datelist FROM calendar AS c
LEFT JOIN `user` AS u ON c.datelist = DATE_FORMAT(u.createtime,'%Y-%m-%d')
WHERE c.datelist BETWEEN '2020-03-01' AND '2020-03-26'
GROUP BY c.datelist
ORDER BY c.datelist
結果如下:
最終效果: