Basierend auf diesem Thread: Eine SQL Abfrage für Sprache oder Alternativsprache
Hallo SQL-Freaks!
Ich möchte unsere Anwendung internationalisieren und hadere mit dem Erstellen eines geeigneten SQL-Statements. Die Anforderung ist die Elemente mit einem Query so auszulesen, daß ich die Übersetzungen in einer gegebenen Sprache (trans_lang_id) erhalte wenn diese vorhanden sind, ansonsten den jeweiligen Text einer StandardSprache (default_lang_id).
Meine Tabellenstruktur:
Da die Anzahl der Sprachen dynamisch sein soll sind diese in einer gesonderten Tabelle LANG gespeichert.
TABLE lang
- id INT AUTOINCREMENT
- code VARCHAR
- name VARCHAR
Z.B.:
id, code, name
1, en, English
2, de, Deutsch
3, fr, Francais
Die übersetzbaren Elemente der DB habe ich jeweils in einen sprachunabhängigen Teil und einen sprachabhängigen Teil zergliedert:
TABLE element
- element_id INT AUTOINCREMENT
- general_data VARCHAR
Z.B.:
id, general_data
1, "item 1"
2, "item 2"
TABLE element_lang
- element_lang_id INT AUTOINCREMENT
- element_id INT
- lang_id INT
- translatable_data VARCHAR
Z.B.:
id, element_id, lang_id, translatable_data
1, 1, 1, "english text"
2, 1, 2, "deutscher Text"
3, 1, 3, "text francais"
4, 2, 1, "another english text"
/* "item 2" ist nicht ins deutsche oder französische übersetzt! */
Ich hatte mir etwa folgendes überlegt:
Dieses Statement bringt mich aber nicht weiter, da für übersetzte Elemente auch die Datensätze der Standardsprache ausgelesen werden. Wie kann ich das verhindern?
Hallo SQL-Freaks!
Ich möchte unsere Anwendung internationalisieren und hadere mit dem Erstellen eines geeigneten SQL-Statements. Die Anforderung ist die Elemente mit einem Query so auszulesen, daß ich die Übersetzungen in einer gegebenen Sprache (trans_lang_id) erhalte wenn diese vorhanden sind, ansonsten den jeweiligen Text einer StandardSprache (default_lang_id).
Meine Tabellenstruktur:
Da die Anzahl der Sprachen dynamisch sein soll sind diese in einer gesonderten Tabelle LANG gespeichert.
TABLE lang
- id INT AUTOINCREMENT
- code VARCHAR
- name VARCHAR
Z.B.:
id, code, name
1, en, English
2, de, Deutsch
3, fr, Francais
Die übersetzbaren Elemente der DB habe ich jeweils in einen sprachunabhängigen Teil und einen sprachabhängigen Teil zergliedert:
TABLE element
- element_id INT AUTOINCREMENT
- general_data VARCHAR
Z.B.:
id, general_data
1, "item 1"
2, "item 2"
TABLE element_lang
- element_lang_id INT AUTOINCREMENT
- element_id INT
- lang_id INT
- translatable_data VARCHAR
Z.B.:
id, element_id, lang_id, translatable_data
1, 1, 1, "english text"
2, 1, 2, "deutscher Text"
3, 1, 3, "text francais"
4, 2, 1, "another english text"
/* "item 2" ist nicht ins deutsche oder französische übersetzt! */
Ich hatte mir etwa folgendes überlegt:
Dieses Statement bringt mich aber nicht weiter, da für übersetzte Elemente auch die Datensätze der Standardsprache ausgelesen werden. Wie kann ich das verhindern?