2012-04-04 43 views
1

我有两个表,一个用于英文类别名称,另一个用于西班牙语类别名称。MySQL:返回空字段而不是无行

我正在尝试编写一个小界面,允许管理员查看哪些英文类别仍需提供翻译。

我会写它,假设你创建一个西班牙类别时,它会继承英文类别的ID。

得到一个结果设置相应类别的,我有这个疑问:

SELECT tbl_cms_categories_en.id as id, 
    tbl_cms_categories_en.name as en, 
    tbl_cms_categories_es.name as es 
FROM tbl_cms_categories_en, tbl_cms_categories_es 
WHERE tbl_cms_categories_en.id = tbl_cms_categories_es.id 

这将返回条目的一个很好的列表:

enter image description here

这符合我的目的很好,但有是一个缺陷。如果西班牙表中没有行,它根本不会返回派生行。

如何更改我的查询,以便如果英文表中有一行但不是西班牙文的那一行,则可以返回派生行以说“找不到翻译”。

阿金:

ID = 8, en = "Security", es = "Translation Not Found" 

任何指导,将bigly赞赏。

Thanks dudes!

+2

你会想要快速阅读外部连接。然后使用COALESCE或等价的用你的“not found”字符串替换你的空字段。并考虑其他方式(西班牙语,但不是英语)。 – Glenn 2012-04-04 23:57:18

+0

因为隐式连接总是内连接,所以您需要使用'LEFT OUTER JOIN'显式JOIN语法,使用'JOIN'和'ON'子句。 – 2012-04-05 00:03:41

回答

4

尝试

SELECT tbl_cms_categories_en.id as id, 
    en.name as en_name, 
    IF(es.name IS NULL, "No Translation Found", es.name) as es_name 
FROM tbl_cms_categories_en AS en 
LEFT JOIN tbl_cms_categories_es AS es 
    ON tbl_cms_categories_en.id = tbl_cms_categories_es.id 
+0

好神的男人。那花了两分钟。我会尽快接受答案!非常感谢。 – 2012-04-04 23:56:43

+0

做了一个快速编辑那里,应该工作,并加快逻辑 – Ascherer 2012-04-04 23:58:00

+0

很高兴帮助:) – Ascherer 2012-04-04 23:59:16

0

你为什么不设置一个默认值所有的西班牙行“翻译未找到”?

只是一个建议...

+0

西班牙行可能不存在的重点。 – 2012-04-05 00:01:02