次のアイデアを試しています。単一のクエリでフォールバック システムを構築しようとしています。背景情報を次に示します。
posts_table
id, timestamp
posts_content_table
id, post_id, language_id, title, description
ここでの目標は、posts_table にクエリを実行してから、同じクエリでフォールバック システムを使用して posts_content_table に結合することです。したがって、存在しない language_id で投稿コンテンツを検索すると、コンテンツを含む language_id にフォールバックできるはずです。複数レベルのフォールバックを許可する必要があります。
例:
SELECT p.id FROM posts_table AS p
LEFT OUTER JOIN posts_content_table AS pc ON (p.id=pc.post_id AND pc.language_id=1)
LEFT OUTER JOIN posts_content_table AS pc2 ON (p.id=pc2.post_id AND pc2.language_id=2)
LEFT OUTER JOIN posts_content_table AS pc3 ON (p.id=pc3.post_id AND pc3.language_id=3)
当然、null 以外のデータが返された場合は、そのデータを最終結果として使用する必要があります。だから、これは私をケースに連れて行きます。このように動作するように CASES を実装するにはどうすればよいですか? 以下で十分でしょうか?
SELECT p.id, CASE title
WHEN pc.title is Null THEN pc2.title
WHEN pc2.title is Null THEN ps3.title
WHEN pc3.title is Null THEN '-'
END
FROM posts_table AS p
LEFT OUTER JOIN posts_content_table AS pc ON (p.id=pc.post_id AND pc.language_id=1)
LEFT OUTER JOIN posts_content_table AS pc ON (p.id=pc.post_id AND pc.language_id=2)
LEFT OUTER JOIN posts_content_table AS pc ON (p.id=pc.post_id AND pc.language_id=3)