メッセージング機能について 2 つの表をたどりました -
message2_recipsテーブル:
mid seq uid status
1 1 1 N
1 1 503 A
およびmessage2テーブル
mid seq created_on created_on_ip created_by body
1 1 2013-08-08 19:17:44 1.2.2.1 503 some_random_text
私はこのクエリを発射しています -
SELECT m.mid, m.seq, m.created_ON, m.created_by, m.body, r.status
FROM message2_recips r
INNER JOIN message2 m ON m.mid=r.mid AND m.seq=r.seq
WHERE r.uid=503 AND r.status in ('A', 'N') AND r.seq=(SELECT max(rr.seq)
FROM message2_recips rr
WHERE rr.mid=m.mid AND rr.status in ('A', 'N')) AND IF (m.seq=1 AND m.created_by=503, 1=0, 1=1)
ORDER BY created_ON DESC
期待される結果は -
mid seq created_on created_by body status
1 1 2013-08-08 19:17:44 503 some_random_text A
しかし、それはゼロの結果を返します
しかしif
、クエリから条件を削除するIF (m.seq=1 AND m.created_by=503, 1=0, 1=1)
と、正しい結果が得られます。message2
ただし、テーブル内のデータを観察した後のクエリの条件は満たされ、機能するはずです。
考えられる理由がわかりません。何がうまくいかないか、どのように修正するかについての指針は非常に役に立ちます。
上記のクエリは次のようになります。
現在のユーザーが発信/受信した会話を取得し、他のテーブルからメッセージ コンテンツを取得します。または以外のステータスのメッセージを取得しDelete
ます。最大シーケンス番号を持つ最新のメッセージで会話をフィルタリングします。各メッセージには、ファッションの増加に伴い独自のシーケンス番号があります。Active
New
これは機能しますが、これはメッセージングの受信トレイ機能のためであるため、ユーザーが自分で開始した会話を見ることができるようにしたいと考えています。現在、上記のクエリが適切に機能していないため、他のユーザーから返信を受け取った後にのみ、彼が開始した会話を見ることができます。