0

受信箱システムを作りました。サインインしたユーザーは、他のサインインしたユーザーにメッセージを送ることができます。データベースの usermessage テーブルには、1. userid と 2. messageid の 2 つのフィールドがあります。以下は、この表からの抜粋です。

userid | messageid
12     | 1
13     | 1
14     | 2
15     | 2
12     | 3
15     | 3
12     | 4
14     | 4

上記の状況では、ユーザー '12' がユーザー '13' にメッセージを送信します。ユーザー「12」または「13」がメールボックスをチェックしているときに、メッセージ ID「1」が最近の会話として受信ボックスの上部に表示されるように、メッセージ ID「1」をテーブルの一番下に移動します。これまでのところ、メッセージID「1」を削除し、各ユーザーIDの新しいクエリとして挿入することでこれを達成できました。これは私のコードです:

DELETE FROM usermessage WHERE userid = '12' and messageid = '1';
INSERT INTO usermessage SET userid = '12', messageid = '1';
DELETE FROM usermessage WHERE userid = '13' and messageid = '1';
INSERT INTO usermessage SET userid = '13', messageid = '1';

これを 1 つのクエリで実行することは可能ですか。これまでのところ、私の問題に関連するスタックフローで明確な答えを見つけることができませんでした.

4

1 に答える 1

0

SORT ステートメントを使用せずに行をクエリしても、作成された時間順に並べ替えられる保証はありません。これは、MySQL が今からそのようなソート動作を提供するチャンスです。

そのため、目的のソート ルールを見つけたり、作成したりする必要があります。メッセージのタイムスタンプ、または [usermessage] テーブルの新しいタイムスタンプ列です。

また、MySQL は削除と挿入のたびに [usermessage] テーブルのインデックスを更新する必要があるため、行の削除と再作成が MySQL プロセスのコストに影響することも注目に値します。

于 2012-03-28T23:17:37.677 に答える