簡単な通知システムを作成していますが、クエリを機能させることができず、混乱しています。
表2から一致する結果がない場合に見えないことを考慮して、「見えない」表1からのすべての通知を選択したいと思います。
table1 t1 (notifications)
+---+-------+--------+
+id + title + content+
+---+-------+--------+
+ 1 + some..+lorem...+
+ 2 + sosf + sfdsdf +
+ 3 + asdf + dsfd +
+---+-------+--------+
table2 t2 (seen notification by each user)
+-------+---------------+
+id_user+id_notification+
+-------+---------------+
+ 1 + 1 +
+ 1 + 3 +
+-------+---------------+
したがって、t2に一致するレコードがない場合、t1からのすべてのレコードをクエリしたいと思います。
私は試した
SELECT t1.*
FROM t1
JOIN t2 ON t2.id_user IS NULL AND t1.id IS NULL
ORDER BY t1.id DESC;
運がない
LEFT JOIN
のテーブルを結合するには、を使用する必要がありますnotification_id
。に一致する値がない場合t2
、の値は次のt2.notification_id
ようになりますNULL
。
SELECT t1.*
FROM t1
LEFT JOIN t2 ON t2.id_notification = t1.id
WHERE t2.id_notification IS NULL
出力:
id title content
2 sosf sfdsdf
特定のユーザーが通知を見たかどうかを確認するには、ON
条件を次のように変更します。
LEFT JOIN t2 ON t2.id_notification = t1.id AND t2.id_user = 2
これにより、ユーザー2には表示されなかったすべての通知、この場合はすべての通知が表示されます。
id title content
1 some.. lorem...
2 sosf sfdsdf
3 asdf dsfd
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加