我有一個標準表的用戶列表和我有一列lastactivity
與UNIX時間戳(這表明當他們登錄)和列timestamp
與UNIX時間戳顯示他們何時註冊。MySQL的函數IFNULL不是GROUP BY工作
我已經建立一個SQL查詢,顯示有多少用戶通過使計數器的計數值有多少用戶每星期登記的周從現在起24小時(86400秒)和分組結果中表現積極:
SELECT
IFNULL(COUNT(*),0) as `counter`,
(WEEK(`timestamp`)) as `week`
FROM
`clients`
WHERE
(CAST(UNIX_TIMESTAMP() as signed) - CAST(`lastactivity` as signed)) <= 86400
GROUP BY
WEEK(`timestamp`);
問題是功能IFNULL(COUNT(*),0)
不按我的意圖工作。如果在計數器上存在NULL/0,即使使用MySQL函數,此SQL查詢也不會顯示星期。這可能是因爲GROUP BY
的工作原理。因此,例如,我會得到這樣的結果:
counter | week
2 | 11
1 | 13
9 | 14
6 | 17
但我想,以顯示每星期是這樣的:
counter | week
2 | 11
0 | 12
1 | 13
9 | 14
0 | 15
0 | 16
6 | 17
任何人有任何想法,我怎麼能解決這個問題?
戈登試圖通過讓LEFT JOIN
查詢來幫助我,但我還是得到了相同的結果,也許我在這裏做得不對:
SELECT
COUNT(a.id) as `counter`,
(WEEK(b.timestamp)) as `week`
FROM
`users` a
LEFT JOIN
`users` b
ON
a.id = b.id
WHERE
(CAST(UNIX_TIMESTAMP() as signed) - CAST(a.lastactivity as signed)) <= 86400
GROUP BY
WEEK(b.timestamp);
這實際上是一個顯示問題 - 因此,如果可用,最好在表示層中處理。 – Strawberry