誰も答えていない別の質問に関連しています。
誰かが私を助けてくれる前に別の質問をしましたが、今は別の状況で立ち往生しています。
さて、2列のような2つの別々のエンジンから使用し、 myisamエンジンをuid
持ち、タイムスタンプであるメモリエンジンを使用しているテーブルに何らかの方法があるかどうか知りたいです。username
lastlogin
私はそれが不可能だと思ったので、データベースにオンラインユーザー(MEMORY ENGINE)という2つの列を持つテーブルを作成しようとしました。ユーザーがログインしたいときは、このようにデータベースをチェックし、ユーザーが存在しない場合は挿入しuid
ますlastlogin
$myquery = mysql_query('SELECT COUNT(1) FROM `onlineusers` WHERE uid="'. $row['uid'] . '"');
if(mysql_result($myquery,0) == 0){
$data['uid'] = $row['uid'];
$db->insert("onlineusers",$data);
}else{
updateStatus($row['uid']);
}
更新ステータス機能は次のようなものです
function updateStatus($uid){
$db = DATABASE::obtain();
$query = mysql_query("UPDATE `onlineusers` set `lastvisit`=now() WHERE uid='".$db->escape($uid)."'");
}
しかし、これについて考えてみると、サーバーを再起動すると、onlineusers のテーブルが空になり、ログインしている Cookie が設定されているユーザーはどうなるでしょうか?
次に、2 つの個別のクエリを使用するように更新関数を変更する必要があります。最初のクエリでは、uid が onlineuses に存在するかどうかを確認し、存在しない場合はそれに挿入するか、存在する場合はタイムスタンプを更新する必要があります。
今、私は尋ねるべき別の質問があります. このメソッドを使用すると、存在するかどうかを確認してから、メモリエンジンを持つ updatestatus 関数で更新する方が高速です...または、ユーザーテーブルにタイムスタンプクローンを作成し、myisam エンジンを持つ各ページチェックで更新しますか??