私はかなり複雑な通知システムを使用していますが、ほとんどの場合非常に単純で、コンテンツが削除されているかどうかを他のテーブルでチェックするのが複雑で、複数のデータテーブルがあります。通知システムなので、それぞれをチェックする必要があります。他の通知タイプを追加できるようにWebサイトを構築するときに、テーブルを簡単に追加できるようにする必要があります。現在のクエリでは、それを使用しています。それを許可していません、私はこれを行うためのより良い方法を考え出そうとしました、しかし私はそうするためのmysqlクエリで十分ではないので、私はいくつかを得ることができることを望んでいます(またはそれはたくさんあることが判明するかもしれません)あなたの一人(または何人か)による援助の。
これが私の現在のクエリです:
SELECT
n.*,
MIN(n.state) state,
MIN(n.status) status,
MAX(n.date) maxDate
FROM notifications n
LEFT JOIN comments c
ON n.type = 'comment'
AND n.uniqueID = c.id
AND c.state='0'
LEFT JOIN posts p
ON n.type = 'post'
AND p.id = n.uniqueID OR n.type = 'comment'
AND p.id = c.postID
WHERE n.toID = '$session'
AND p.state = 0
GROUP BY n.uniqueID
ORDER BY status ASC, maxDate DESC
つまり、上記のステートメントが行うことは、一言で言えば、これです。通知テーブルから通知を選択します。このテーブルには、そのコンテンツの列がtype
あります。uniqueID
したがって、そのタイプの行ごとに、 from通知がpostsテーブルの一意のIDと同じposts
であるpostテーブルをチェックし、次にその投稿のをチェックして、削除されているかどうかを確認します(削除されていない場合)。削除されました、state = 0、それ以外の場合は必要ありません)。コメントについても同じことが言えます。uniqueID
state
したがって、これと同じようにすべてを実行する方法が必要ですが、新しいテーブルチェックを継続的に追加しやすくする必要があります。likeと呼ばれるテーブルに別の左結合を追加しようとしていますが、何らかの理由でそれを一緒に機能させることができません。しかし、私はそれをやりたいことをするこのコードを思いついた。(ただし、likesテーブルの場合のみ、必要な他のテーブルは含まれません)
SELECT
n.*,
MIN(n.state) state,
MIN(n.status) status,
MAX(n.date) maxDate
FROM notifications n
LEFT JOIN likes l
ON n.type = 'likes'
AND n.uniqueID = l.id
WHERE n.toID = '$session'
AND l.state='0'
GROUP BY n.uniqueID
ORDER BY status ASC, maxDate DESC
誰かがこの解決策を手伝ってくれることを願っています、よろしくお願いします!