私はSQLに非常に慣れていません。問題の解決を手伝ってください。
エンジン間の移行 (phpbb から drupal へ) 後に取得した、サイトのプライベート メッセージのテーブルがあります。
たとえば、3 つの列があるとします。
- mid - メッセージ ID 用
- thread - スレッド ID
- 受信者- メッセージを受け取るユーザー ID。
すべてのメッセージは受信者と作成者のメールボックスに表示されるため、メッセージごとに 2 つの文字列があります。
問題は、メッセージのスレッドID が正しくないことです (基本的に、それらはmidに等しい)。そのため、2 人のユーザー間の通信は、100 の個別のスレッドとして表示されます。
例えば:
user 100 wrote message to user 101
user 101 replied to user 100
user 102 wrote message to user 100
テーブルは次のようになります。
________________________________
| mid | thread | recipient |
| | | |
| 1 | 1 | 101 | ← message 1 in recipient's mailbox
| 1 | 1 | 100 | ← message 1 in author's mailbox
| 2 | 2 | 100 | ...
| 2 | 2 | 101 |
| 3 | 3 | 100 |
| 3 | 3 | 102 |
|________|___________|___________|
私の目標は、同じ受信者のペアを持つペア行のすべてのグループに同じスレッド ID を与えることです。
________________________________
| mid | thread | recipient |
| | | |
| 1 | 1 | 101 | }
| 1 | 1 | 100 | } Correspondence between 100 and 101 must
| 2 | 1 | 100 | } have the same thread id (1)
| 2 | 1 | 101 | }
| 3 | 2 | 100 |
| 3 | 2 | 102 |
|________|___________|___________|
アップデート:
スレッド ID は、同じ受信者のペア間で現在行われているすべての会話で同じでなければなりません。(それ以上の会話について心配する必要はありません。ユーザーは、メッセージを書き込むときに新しいスレッドを開くオプションがあり、新しいスレッド ID を生成するか、既存のスレッドで返信し、既存のスレッド ID でメッセージをマークします。私が望むのは、収集することだけですスレッド内の各 2 ユーザー間の既存メッセージのトン)。
ある種のサイクルのように、すべての受信者 ID を mid ごとに検索し、昇順で並べ替えた後にそれらを配列にマージすることを想像します。
- 中間 1 の場合: (100, 101)
- ミッド 2 の場合: (100, 101)
- ミッド 3 の場合: (100, 102)
次に、同じ配列に、目的のスレッド ID となる同じ ID を指定します。
- (100, 101) = 1
- (100, 101) = 1
- (100, 102) = 2
私のアルゴリズムがSQLクエリのみで可能かどうかはわかりません