2

time();ユーザーがログインすると、PHPでいっぱいのデータベースが保存されます。

ユーザー名の値を作成し、ログイン数を更新する必要があることはわかっていますが、代わりに、phptime();でいっぱいのデータベースがあります。username

個々のユーザーのログイン数を確認する方法は次のとおりです。

<?php
function to_date($timestamp) {
    return date('Y-m-d', $timestamp);
}
$days = array();
$occurences = array();
$zero = array();
$query = mysql_query("SELECT `login_time` FROM `stats` WHERE `userid`='$someuserid' ORDER BY `login_time` ASC");
while($rows = mysql_fetch_array($query)) {
    $days[] = to_date($rows['login_time']);
}
$days[] = to_date(time());
$occurences = array_count_values($days);
$days = array_unique($days);
sort($days);
for($i = 0; $i < count($days); $i++) {
    $difference = isset($days[$i+1]) ? strtotime($days[$i+1]) - strtotime($days[$i]) : 0;
    if($difference > 86400) {
        $difference = ceil(abs($difference/86400));
        $fill = $days[$i];
        for($k = 0; $k < $difference-1; $k++) {
        $fill += strtotime('+1 day', strtotime($fill));
            $zero[] = to_date($fill);
        }
    }
}
echo "[";
for($i = 0; $i < count($zero); $i++) {
    echo "[\"".$zero[$i]."\",0], ";
}
for($i = 0; $i < count($occurences); $i++) {
    if($i == count($occurences)-1)
        echo "[\"".$days[$i]."\",".($occurences[$days[$i]]-1)."]";
    else {
        echo "[\"".$days[$i]."\",".$occurences[$days[$i]]."], ";
    }
}
echo "]";
?>

これをすべてのユーザーに適用して、データベースで毎日最も多くログインしたユーザーを見つけるにはどうすればよいでしょうか? 出力は jqplot 用にエンコードされます。

4

3 に答える 3

2
SELECT
    userid,
    DATE(FROM_UNIXTIME(login_time-MOD(login_time,86400)+1)) as logindate,
    count(*) as logincount
FROM stats 
GROUP BY userid, logindate

上記のクエリを使用して、必要なすべてのデータをデータベースから直接取得します。これにより、PHPを使用した後処理を回避できます。

さらに、(任意の)日に最大ログイン数を持つレコードを1つだけ取得する場合は、上記のクエリにSQLラッパーを追加して以下のクエリを使用します。

SELECT * FROM (
    SELECT
        userid,
        DATE(FROM_UNIXTIME(login_time-MOD(login_time,86400)+1)) as logindate,
        count(*) as logincount
    FROM stats 
    GROUP BY userid, logindate
) tmptable 
ORDER BY logincount DESC, logindate DESC LIMIT 1

これが役に立ったかどうか教えてください。

于 2012-04-30T09:50:36.223 に答える
0

SELECT userid, COUNT(userid) AS 'login_count' FROM statsGROUP BYuserid

于 2012-04-30T09:11:40.303 に答える