2

自分のページに10日間アクセスしたユーザーの価値をグラフで取得したいと思います。過去10日間のすべての値をCOUNT()する必要があります。

最適なレイアウトは

Day|COUNT(ip)

1 - 10
2 - 12
3 - 52
......

私の言いたいことをご理解いただければ幸いです。MySQLはこれを直接行うことができますか、それともPHPで10個の個別のクエリでこれを行う必要がありますか?

よろしく、モリッツ

テーブル構造で更新:

    Id (Auto Increment)|Time (Unix Timestamp)|Ip|Referer
4

3 に答える 3

2

これにより、実際の日付値を含む結果が得られます。

SELECT
    COUNT(DISTINCT ip),
    FROM_UNIXTIME(Time, '%m/%d/%Y') AS Day
FROM
    tbl
WHERE
    Time >= UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL -10 DAY))
GROUP BY
    FROM_UNIXTIME(Time, '%m/%d/%Y')
于 2012-05-21T19:34:50.400 に答える
2

これはあなたのために速く走るはずです

SELECT COUNT(ip) ipcount,dt FROM
(
    SELECT ip,DATE(FROM_UNIXTIME(`Time`)) as dt FROM mytable
    WHERE `Time` > TO_UNIXTIME(NOW() - INTERVAL 10 DAY)
) A GROUP BY dt;

インデックスがあることを確認してくださいTime

ALTER TABLE mytable ADD INDEX TimeIndex (`Time`);
于 2012-05-21T19:42:39.647 に答える
1

これを試して:

SELECT CAST(DATE(FROM_UNIXTIME(`Time`)) AS CHAR) as dateoftime, COUNT(Ip) as cnt
FROM tablename
WHERE DATE(FROM_UNIXTIME(`Time`)) > DATE_SUB(current_timestamp, INTERVAL 10 DAY)
GROUP BY CAST(DATE(FROM_UNIXTIME(`Time`)) AS CHAR)
于 2012-05-21T19:32:48.973 に答える