0

私は現在、ログインしている訪問者の割合など、他のいくつかの統計を使用してヒットカウンターに取り組んでいます。

これまでにさまざまなSQLクエリを試しましたが、現在は次の問題に悩まされています。

SELECT COUNT(*) AS totalhits,
COUNT(DISTINCT ip) AS visitors,
COUNT(user_id > 0) AS hitsloggedin,
COUNT(DISTINCT ip, user_id > 0) AS visitorsloggedin
FROM db.tblhits

どうやらこれは間違っています。user_idが0の行がありますが、3番目と4番目のCOUNTステートメントですべての行がカウントされています。ただし、最初の2つのステートメントは問題なく機能します。

誰かが今彼のお尻を笑っているのは確かですが、これは私が試したものです。

正しい方向へのナッジは大歓迎です!

4

2 に答える 2

3

以下に記載されているように:COUNT(expr)

ステートメントによって取得された行のの非NULL値の数のカウントを返します。exprSELECT

3番目のケースexpruser_id > 0である場合、その式がまたはのいずれかNULLに評価されるときはそうではありません。したがって、の結果は期待したものではありません。TRUEFALSECOUNT()

MySQLには真のブール型がなく、代わりに10forTRUEFALSEそれぞれ使用するため、代わりに単純に使用できますSUM()。他のRDBMSでは、次のCASEを使用する必要があります。

COUNT(CASE WHEN user_id > 0 THEN 1 ELSE NULL END)

4番目の式では、次のことができます。

COUNT(DISTINCT CASE WHEN user_id > 0 THEN ip ELSE NULL END)
于 2012-11-30T10:08:17.137 に答える
0

これを試して ::

SELECT 

(Select COUNT(*) FROM db.tblhits )AS totalhits,
(select COUNT(DISTINCT ip) FROM db.tblhits) AS visitors,
(select COUNT(user_id) FROM db.tblhits where user_id>0) AS hitsloggedin,
(select COUNT(DISTINCT ip ) FROM db.tblhits where user_id > 0) AS visitorsloggedin
FROM db.tblhits
于 2012-11-30T10:05:01.000 に答える