我使用以下sql来获取我要翻译的一些键:
SELECT * FROM translate_keys
LEFT JOIN translations
ON translate_keys.id = translations.translate_key_id
LEFT JOIN languages
ON languages.id = translations.language_id
WHERE languages.is_default = 1;
如果某个键的翻译为空,我将无法获得任何结果(语言包含内容)!我理解这是因为语言与翻译无关。我能做什么?我以为左连接就足够了!
提前感谢yoy
答案 0 :(得分:2)
如果我正确理解您的问题(语言包含内容),您就会加入错误的方向。您希望语言表成为主表。试试这个:
SELECT *
FROM languages
LEFT JOIN translations ON languages.id = translations.language_id
LEFT JOIN translate_keys ON translate_keys.id = translations.translate_key_id
WHERE languages.is_default = 1;
或者,如果您尝试返回所有密钥并且没有收到任何结果,那是因为您的WHERE标准 - 正如@Oswald正确指出的那样,将其移至您的JOIN并且您应该获得记录(显然没有翻译或语言):
SELECT *
FROM translate_keys
LEFT JOIN translations ON translate_keys.id = translations.translate_key_id
LEFT JOIN languages ON languages.id = translations.language_id AND languages.is_default = 1;
祝你好运。
答案 1 :(得分:1)
问题是WHERE
条件languages.is_default = 1
。这会消除左连接添加的所有虚拟记录,因为如果不存在转换,languages.is_default
为NULL
。