SQL フィドルはこちら: http://sqlfiddle.com/#!2/a2e41/8
いくつかのチェックを行うクエリがあります。列 uidto または uidfrom に特定の値が含まれているかどうか。これは正常に機能しますが、列 hidden1 または hidden2 に特定の値が含まれている場合に除外するとすぐに、クエリはとにかく結果を返します。最初の uidto、uidfrom チェックを実行するとすぐに、何も返されませんが、これは予想どおりです。すべてのチェックを行う方法はありますか?一方が他方を支持して無視されていますか?
何か案は?
編集:
チェックする値を含む列 hidden1 にもかかわらず、これはまだ返されます。
SELECT m.threadid,
m.uidto,
m.uidfrom,
m.type,
m.hidden1,
m.hidden2
FROM messages m
WHERE m.uidto = 1
OR m.uidfrom = 1
AND m.hidden1 <> 1
AND m.hidden2 <> 1
GROUP BY threadid;
これは除外を尊重しているように見えますが、1 を含む uidfrom または uidto のチェックは行いません
SELECT m.threadid,
m.uidto,
m.uidfrom,
m.type,
m.hidden1,
m.hidden2
FROM messages m
WHERE m.hidden1 <> 1
AND m.hidden2 <> 1
GROUP BY threadid;
編集:
いくつかのスレッド ID があり、値が uidto または uidfrom に一致するかどうかを確認し、次にユーザー ID が hidden1 または hidden2 にあるかどうかを確認することで、スレッドに関与する各ユーザー (ユーザーは 2 人しか存在しません) に属するメッセージを取得します。
hidden1 列と hidden2 列の値は、スレッドを非表示にすることを選択したユーザー ID です。
ユーザー 1 が自分のスレッドを削除した場合、ユーザー ID (1) を hidden1 列に入れ、彼には見えないようにしますが、他のユーザーには見えるようにします。スレッドに関与しているユーザー ID 22 がスレッドを削除したい場合、ユーザー ID 22 は hidden2 に入り、どちらもそのスレッドを見ることができなくなります。
メッセージスレッドは、メッセージを送信した人、またはメッセージを受信した人だけが見ることができます。他の誰も関与しません。