Я работаю над дизайном базы данных многоязычного веб-сайта. Хочу воспользоваться следующим популярным методом:
postid | post_title | lang
------------------------------
1 | title1 | en
1 | title2 | fr
2 | title3 | en
Когда я меняю язык, я запускаю запрос, чтобы получить сообщение типа
select post_title from post where lang = "en" group by postid
postid | post_title | lang
------------------------------
1 | title1 | en
2 | title3 | en
select post_title from post where lang = "fr" group by postid
postid | post_title | lang
------------------------------
1 | title2 | fr
Проблема в том, что мне нужен запрос, который даст мне результат вроде
postid | post_title | lang
------------------------------
1 | title2 | fr
2 | title3 | en
означает, что если я не получаю сообщение на языке fr, я должен получить сообщение на языке en по умолчанию.






Этот запрос вернет строки, где lang = "fr", или строки, где lang = "en", если в "fr" не было найдено ни одной записи для соответствующего postid.
SELECT
*
FROM post AS a
WHERE
a.lang = "fr"
OR (
a.lang = "en"
AND (
SELECT COUNT(*)
FROM post AS b
WHERE
b.lang = "fr"
AND b.postid = a.postid
) = 0
)
GROUP BY a.postid
Эта попытка работает, но я не могу сказать, лучший ли это способ ее достичь.