2012-04-04 48 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