フィールドに基づくテーブルの結合に関する問題を解決する必要があります。私は3つのテーブルを持っています:
NEWS (id,title)
COMMENTS (id,idtopic,message)
NOTIFICATIONS (iduser,idnews,idtopic,idpost)
COMMENTS
hasの場合はidtopic=0
トピック、>0 の場合はトピックの返信です。NOTIFICATIONS
各種情報を利用者に通知します。
を選択して、他のテーブルからフィールドを取得したいと思いますNOTIFICATIONS
。
ベースSELECT
は次のとおりです。
SELECT idnews,idtopic,idpost FROM notifications WHERE iduser=X
今、私は参加したいです:
- NEWS->タイトル、idnews>0の場合
- COMMENTS->メッセージ、idtopic>0の場合
- COMMENTS->メッセージ、idpost>0の場合
私は次のようなものを作るべきだと思います:
SELECT CASE idnews>0 THEN ??,
CASE idtopic>0 THEN ??, CASE idpost>0 THEN
FROM NOTIFICATIONS
idnews/idtopic/idpost のいずれかが常に >0 であるため、タイトルまたはメッセージを含むフィールドを常に返したい
各レコードの各テーブルを結合せずにSELECT内でSELECTする方法は? 作りたくない
SELECT *
FROM NOTIFICATIONS
LEFT JOIN NEWS ON NOTIFICATIONS.idnews=NEWS.id
LEFT JOIN COMMENTS ON NOTIFICATIONS.idtopic=COMMENTS.id
LEFT JOIN COMMENTS ON NOTIFICATIONS.idpost=COMMENTS.id
よりパフォーマンスが悪くなってしまうからCASE WHEN idnews>0 OR idtopic>0 OR idpost>0
です。