私は問題なく動作するチャット システムを持っていますが、私が気付いたメッセージ リストは、1 人あたりのすべてのメッセージを取得し、最後の結果を表示します。これは明らかにリソースの大量の浪費であり、ユーザーごとに 1 つの結果のみを返すためにサーバーにストレスを与えます。
これはメッセージ リストを取得するためのクエリです。その後、ユーザーごとに最新のメッセージのみを表示するために配列をクリーンアップする while ループがあります。JOIN を使用してこれを行うより良い方法があることはわかっていますが、取得できません。その周りに頭を向けます。
$result = dbconstruct("SELECT messages.id, messages.msgfrom, messages.msg,
messages.active, messages.replied, users.username, users.online, users.admin,
users.imagename FROM messages, users WHERE msgto='$_SESSION[id]'
AND users.id=msgfrom ORDER by messages.id DESC");
私は他の回答を見てきましたが、述べたように、結合テクニックを理解するのは非常に難しいと感じました.
アップデート
必要なことをうまく説明できていないと思います。現在、上記のクエリを実行し、約 2000 件の結果を返し、これを使用して各ユーザー メッセージを 1 つのメッセージにフィルター処理しています。
$clean = array(); while($result->fetch_assoc()) { if(in_array($result[msgfrom],
$clean)) { }
else { //print message }
$usercheck = array_push($clean, $result[msgfrom]); }
これにより、メッセージ リストが適切に表示され、各ユーザーからの最後のメッセージのみが表示されますが、これは非常に悪い方法です。SQL クエリ内でこれを行う方法が必要です。