標準のテーブルがあり、UNIXのタイムスタンプ(ログインした時刻を示す)とのUNIXタイムスタンプのカラムlastactivity
があります。登録したときを示します。MySQL関数IFNULLがGROUP BYで動作していない
カウンタは多くのユーザーが毎週登録されているか数えるので、私は数週間で、今とグループ化された結果から、24時間(86400秒)以内にアクティブであったどのように多くのユーザーを示してSQLクエリを構築しました:
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)
が機能していないことです。 IFNULL()
MySQL機能でもカウンタにNULL/0がある場合、この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