私は単純なウェブチャットサーバーに取り組んでいます。私は2つのテーブルを持っています:
chatMsgs:
- RowId
- ユーザー名
- 時間
- アクション
- 目標
- メッセージ
onlineUsers:
- ユーザー名
- アクション
- 最後にログインした時
online.LastActive <%t%-120のonlineUsersから行を削除するにはどうすればよいですか。また、onlineUsersから削除されたアイテムについては、chatMsgsに新しい行を追加したいと思います。
Username=onlineUsers.username,
LastAction='logout',
Time=%t%,
Message='Timed out after 2min'
%t%は単なるプレースホルダーであり、phpのtime()戻り値に置き換えられます。可能であれば、mysqli_queryハンドラーを1回呼び出すだけでこれを実行したいと思いますが、クエリ文字列にはmysqlサーバーの複数のディレクティブを含めることができます。
次の作品はafaik(完全にテストされていません)ですが、もっと良い方法があるかどうか疑問に思いました:
<?php
// $db is an mysqli database link.
$t = time()
$e = $t - 120,
$q = "SELECT Username FROM onlineUsers WHERE LastActive<={$e};",
$r = $db->query($q);
if (!$r)
die('db error');
elseif ($r->num_rows > 0) {
$q = '';
$r = $r->fetch_all(MYSQLI_NUM);
for ($n in $r)
$q .= "INSERT INTO chatMsg(Username,Time,Action,Message) VALUES('{$n}',{$t},'Logout','Timed out after 2min');";
$q .= "DELETE FROM onlineUsers WHERE LastActive<={$e};";
$r = $db->query($q);
if (!$r)
die('db error');
}
?>