与えられた2つのテーブル:
image(id, cat_id, name)
image_translation(id, title, desc, lang)
(名前とIDは一意です)
特定のファイルのすべての翻訳を選択するためのクエリ:
SELECT c.id AS c__id,
c.cat_id AS c__cat_id,
c.name AS c__name,
c2.id AS c2__id,
c2.title AS c2__title,
c2.desc AS c2__desc,
c2.lang AS c2__lang,
FROM image c
LEFT JOIN image_translation c2
ON c.id = c2.id
WHERE ( c1.name = 'file.jpg' )
戻り値:
c__id | c__cat_id | c2__id | c__name | c2__title | cs__desc | c2__lang
------+------------+-----------+-----------+---------------+--------------+---------
114 | 2 | 114 | file.jpg | default title | default desc | en
114 | 2 | 114 | file.jpg | NULL | desc in de | de
114 | 2 | 114 | file.jpg | title in fr | '' | fr
特定の言語で特定のファイルの翻訳を選択するには、明らかにwhere句を追加する必要があります。
ただし、デフォルトの行コンテンツが返されます。これには、翻訳時に空のフィールドが含まれる場合があります。
結果をデフォルト値とマージし、empyフィールドをデフォルト値で上書きするにはどうすればよいですか?lang en:のデフォルト値が返されます。
SELECT c2.title AS c2__title,
c2.desc AS c2__desc,
c2.lang AS c2__lang,
FROM image c
LEFT JOIN image_translation c2
ON c.id = c2.id
WHERE ( c1.name = 'file.jpg' )
AND WHERE ( c2.lang = 'en')
私が期待するサンプル結果:
ドイツ語の場合:
-- AND WHERE ( c2.lang = 'de' )
c__id | c__cat_id | c2__id | c__name | c2__title | cs__desc | c2__lang
-----+------------+-----------+-----------+---------------+--------------+---------
114 | 2 | 114 | file.jpg | default title | desc in de | de
フランス語の場合:
-- AND WHERE ( c2.lang = 'fr' )
c__id | c__cat_id | c2__id | c__name | c2__title | cs__desc | c2__lang
-----+------------+-----------+-----------+---------------+--------------+---------
114 | 2 | 114 | file.jpg | title in fr | default desc | fr
1つのスマートクエリでそれを正しく行う方法は?
(私はMySQLとDoctrine ORMをI18Nの動作で使用しています)