0

重複の可能性:
Webサイトでオンラインユーザーをカウントする方法

ブラウザまたはタブを閉じたユーザーを削除して、オンラインユーザーリストのページに戻ったときに元に戻すにはどうすればよいですか?これが私のコードです:

 $sql = "SELECT
user_id,
user_name,
user_class,
online
FROM
users
WHERE
online = 1
GROUP BY
 user_name ASC ";
$result = mysql_query($sql);
if(!$result)
{
echo 'There are currently no user online.' . mysql_error();
}
else
{
if(mysql_num_rows($result) == 0)
{
    echo 'There are currently no user online.';
}
else
{
    //display category data
    while($row = mysql_fetch_assoc($result))
    { $D= $row['online']; 
    if( ($D) !=1)
    {
    echo 'There are currently no user online.';
}
else
{ 
         echo'<a href="/index.php?area=profile&userid=' . $row['user_id'] .  '" ' . $row['user_class'] . '>' . $row['user_name'] . '</a>, ';}}}}?>
4

1 に答える 1

2

このようにDBでフラグを使用することはありません。ユーザーの最後の出現をログに記録するリレーショナルテーブルを設定する必要があります。通常5分程度のマージン。

基本的に、テーブルにログインするすべてのページの読み込みuser_id、datetime

次に、誰がオンラインであるかを知りたい場所でページが読み込まれるたびに、日時が>=時間-5分であるテーブルを確認します。

コメントのチュートリアルは、私が何を意味するのかわからない場合に役立つかもしれませんが、一般的には次のようになります。

ユーザーがサイトを操作したときにログに記録します。これは、リレーショナルテーブルのページの読み込み、ajaxリクエストなどで発生する可能性があります。すべての動作を追跡でき、ユーザーテーブルを不必要に更新することを回避できるため、リレーショナルをお勧めします。

INSERT INTO `site_activity` (`user_id`, `date_time`) VALUES ( $user_id, NOW() )
// by the way, here we assume you're escaping $user_id

次に、ページの読み込み時にそのテーブルをクエリします。カウントのために直接それを行うか、ユーザーテーブルに参加してWHOがオンラインであることを報告することができます。以下は、過去5分間の結果を取得するための基本的なクエリです。

SELECT * FROM `site_activity` WHERE `date_time` >= DATE_SUB( NOW(), INTERVAL 5 MINUTE )

これは、構造の基本的な考え方を示すためだけのものです。ユースケースのシナリオでは、ニーズや既存のコードなどに関するより多くの情報が必要になります。

于 2012-10-05T20:16:30.917 に答える