Join auch mit nicht existenten ID's

ZodiacXP

Erfahrenes Mitglied
Hallo.

Ja. Es gibt LEFT JOIN und RIGHT JOIN. Aber mit diesem Problem komm ich nicht zurecht:

Tabelle `tags`:
Code:
textID (smallint) | tag (varchar)
  1 ; "Welcome"
  2 ; "ToMySite"

Tabelle `text`:
Code:
langID (smallint) | textID (smallint) | text (text)
  49 ; 1 ; "Willkommen"
  49 ; 2 ; "zu meiner Seite"
  50 ; 1 ; "Bienvenue"

Die Tabellen sind ein Beispiel.
Angenommen langID 49 ist die Standardsprache aber der Nutzer hat langID 50 gewählt.
Da merkt man das eine Übersetzung fehlt. An dieser Stelle soll dann der Eintrag für die Standardsprache auftauchen.

Wie muss man einen entsprechenden SQL-Befehl formulieren?

Ziel (wenn 50 gewählt wurde):
Code:
tag | text
  "Welcome" ; "Bienvenue"
  "ToMySite" ; "zu meiner Seite"
 
Hi,

wähle die Standardsprache mit aus und sortiere nach <aktuelle Sprache>, <Standardsprache>:

SQL:
SELECT ... FROM `tags` 
   INNER JOIN `text` ON (...)
   WHERE `text`.langID = 49 OR `text`.langID = 50 
   ORDER BY FIELD(`text`.langID, '50', '49') ASC
   LIMIT 1

LG
 
Zuletzt bearbeitet von einem Moderator:
Gute Idee. Noch n Tacken von dem Weg was ich gesucht hab. Konnte deine SQL-Anweisung aber Ergänzen:

Code:
SELECT `tag`, `text` FROM (
	SELECT `text`.textID, `text`.text, `tags`.tag
	FROM tags INNER JOIN text
	ON tags.textID = text.textID
	WHERE `text`.langID = 50 OR `text`.langID = 49
	ORDER BY FIELD(`langID`, 50, 49)
) AS `Tmp` GROUP BY `textID`

Ergebnis ist eine Tabelle in der jeder Tag nur einmal vorkommt mit der fremden Sprache als "primäre Wahl" und der Standardsprache wenn es einen Tag nicht in der Fremdsprache gibt.

(getestet mit MySQL)
 
Zuletzt bearbeitet:
Zurück