我有一张类似附图的MySQL表。
[id + locale]是我的表键。我有所有的英语术语,en_US作为我的语言环境,如果我有任何其他语言环境的翻译,我将它们添加到具有相同ID但不同语言环境的表中。如果在另一个语言环境中没有id的记录,则意味着我们仍然没有翻译它。
我的例外结果也在图片中。为此,我使用了这个SQL查询:
SELECT t1.id as id, (SELECT t2.text FROM translation t2 WHERE t2.id = t1.id AND t2.locale= :locale ) as translated, t1.text as english FROM translation t1 WHERE t1.locale = 'en_US' AND t1.id= :id
(:id 和:locale 是我的变量参数)
我的问题:
你知道更好的SQL来完成这项工作吗?或者我如何对已翻译的专栏进行排序和搜索?
谢谢
答案 0 :(得分:0)
Left Join
和Left Outer Join
是相同的。 outer
关键字只是可选的。
尝试使用以下查询:
SELECT t1.id as id,
t1.Text as English,
t2.Text as Translated
FROM translation t1
LEFT JOIN translation t2 ON t2.id = t1.id
WHERE t1.locale = 'en_US'
AND t2.locale = :locale
AND t1.id = :id
答案 1 :(得分:0)
最好使用左连接。您可以通过在查询左侧添加条件来搜索:
SELECT t1.id as id,
t1.text as english,
t2.text as translated
FROM translation t1
LEFT JOIN translation t2 on t1.id = t2.id
and t2.locale = :locale
WHERE t1.locale = 'en_US'
ORDER BY translated
这样,即使没有符合您的':locale'的翻译,您仍然可以获得英文翻译。