2012-04-04 10 views
1

Ich habe zwei Tabellen, eine für englische Kategorienamen und eine andere für spanische Kategorienamen.MySQL: Rückgabe leeres Feld statt keiner Zeile

Ich versuche, eine kleine Schnittstelle zu schreiben, die es einem Admin ermöglicht zu sehen, für welche englischen Kategorien eine Übersetzung noch bereitgestellt werden muss.

Ich schreibe es unter der Annahme, dass wenn Sie eine spanische Kategorie erstellen, er die ID der englischen Kategorie erbt.

Um eine Ergebnismenge von entsprechenden Kategorien zu erhalten, habe ich diese Anfrage:

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 

Das gibt eine schöne Liste von Einträgen:

enter image description here

Dieses gut meinen Zweck dient, aber es ist ein Mangel. Wenn in der spanischen Tabelle keine Zeile vorhanden ist, gibt sie keine abgeleitete Zeile zurück.

Wie könnte ich meine Abfrage so ändern, dass, wenn es eine Zeile in der englischen Tabelle gibt, aber nicht die spanische, ich die abgeleitete Zeile zurückgeben könnte, um "Keine Übersetzung gefunden" zu sagen.

Akin:

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

Jede mögliche Anleitung geschätzt werden bigly.

Danke Jungs!

+2

Sie wollen eine kurze Lektüre auf OUTER JOIN machen. Verwenden Sie dann COALESCE oder das Äquivalent, um das Nullfeld durch die Zeichenfolge "not found" zu ersetzen. Und bedenken Sie umgekehrt (Spanisch, aber kein Englisch). – Glenn

+0

Sie müssen die explizite JOIN-Syntax mit einem 'LEFT OUTER JOIN' verwenden, wobei Sie' JOIN'- und 'ON'-Klauseln verwenden, da ein impliziter Join immer ein innerer Join ist. –

Antwort

4

versuchen

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

Guter Gott Mann. Das dauerte ... zwei Minuten. Wird die Antwort annehmen, sobald ich kann! Vielen Dank. –

+0

machte eine schnelle Bearbeitung dort, sollte funktionieren und beschleunigen die Logik – Ascherer

+0

Froh, zu helfen :) – Ascherer

0

Warum Sie nicht über einen Standardwert für alle spanischen Reihen eingerichtet, um „Übersetzung nicht gefunden“?

Nur ein Vorschlag ...

+0

Spanisch Zeilen möglicherweise nicht vorhanden ist der Punkt. –

Verwandte Themen