Hallo leute, ich hab eine tabelle A mit daten und eine weitere tabelle B, wo für tabelle A die Spracheinträge sind (also ausgaben, die je nach Sprache englisch oder deutsch sind…)
Ich wollte nun für die verwaltung folgendes ermöglichen un hoffe, dass es mit einer abfrage geht… wenn nicht wär es schade, aber kein beinbruch…
Die Abfrage soll Daten aus Tabelle mit A mit einem englischen Titel aus Tabelle B ausgeben, sollte der Title jedoch auf englisch nicht vergeben sein (also leer), soll der deutsche titel genommen werden. Bisher hab ich nur, dass ich mir die Englischen titel zu den daten geben lassen und da, wo der Eintrag leer ist, hol ich noch den deutschen dazu. Mich stört daran, dass viele extra Abfragen generiert werden und ich hab mich gefragt, ob das evtl. auch in einer Abfrage zu realisieren sei.
hier meine abfrage nur für en:
select P.id as PID, cDate, english, german, title
from al_com_pressreleases P, al_l10n_pressreleases L
where P.id = L.comID and L.langID=1
order by cDate desc
Schade…
Warum sollte es in einer Tabelle gehen, wenn es in zweien nicht geht; außer ich nehm beide un frag dann in php ab… ja gut.
Aber der Sinn hinter der Trennung ist ja, dass die Sprache schön sauber erfasst ist ([U]click[/U] post #17)… und alles umzumodeln ist keine Option… trotzdem danke.
Die Translationtables haben doch sicher ein Identifikations-Key, sprich:
[translate_table]
key, text , lang
doublekill, Doublekill, en
doublekill, Doppeltötung, de
pet, Pet, en
pet, Haustier, de
pet, le pèt, fr
stupid, Dummkopf, de
stupid, le dúmmkopfé, fr
Text: My pet got a doublekill last time and the enemy called him stupid^^ ;D
Dann liest du dir alle Keys zu dem spezifischen Wörtern und (ordnest) ORDER BY en ( nach englisch ) und lässt dir jeweils die erste Ausgabe ausgeben.
Result: My Pet got a doublekill last time and the enemy called him Dummkopf^^ ;D ( Da nach en sortiert wurde, aber kein Eintrag mit „en“ vorhanden ist, wird das de ausgegeben. )
…oder so, bin gerade etwas unkreativ ohne meinen Kaffee… daher, KAFFEE TIME!
Das ist nur eine Tabelle, plus eine Tabelle für die Sprach ID. Ich hatte dich falsch verstanden.
Ich wäre aber, bei deinem alten Schema geblieben, da du so immer einen join brauchst und wenn die Sprache fehlt eine zweite Abfrage. Mit zusätzlichen Spalten verletzt du zwar Normalisierungsregeln, dafür ist die Abfrage schneller und das Pflegen der Daten u.U. einfacher. Das Prpoblem ist ja, dass du immer einen vorhandenen Defaultwert brauchst, dass wäre dann eine Spalte in einer Sprache z.b. de und eben die gewählte Sprache z.b. en. Die Abfrage sähe dann so aus, wobei en die gewählte dynamisch ist:
SELECT en, de FROM text WHERE text_id = 'xxxx'Somit hättest du bei jeder Abfrage die entsprechenden Werte.
Gerade bei Texten, die ja für eine Seite essentiell sind, ist es wichtig, dass die Abfrage schnell sind, daher kann und sollte man durchaus auf Normalisierung verzichten. Wobei ich mir aber in deinem Fall nicht sicher bin, da es sich anscheinend nicht auschließlich um die Meldungen für die Anwendung handelt, sondern um die Inhalte. Dann könntest du die Abfrage noch erweitern WHERE P.id = L.comID and (L.langID=1 || L.langID=2) wenn 2 die Defaultsprache ist.