Thread SQL - Sprachauswahl WHERE-Klausel mit "Fallback"?: Geht sowas? (5 answers)
Opened by renee at 2006-01-31 00:08

Cremator
 2006-01-30 20:09
#10357 #10357
User since
2003-11-26
97 Artikel
BenutzerIn
[default_avatar]
Benutze Datenbank ist MySQL 4.1 mit Standard MyISAM Tabellen.

Ich habe hier eine Tabelle für Übersetzungen:
Code: (dl )
1
2
3
4
5
6
7
8
CREATE TABLE translations (
id BIGINT NOT NULL AUTO_INCREMENT,
lang_code CHAR(5) NOT NULL,
item_id BIGINT NOT NULL,
item_name VARCHAR(255) NOT NULL,
item_desciption TEXT NULL,
PRIMARY KEY(id)
);

item_id ist der Foreign Key der das gesuchte Element referenziert (zur id aus der Tabelle items).

Jetzt will ich aus dieser Tabelle alle übersetzten item_name und item_description für eine bestimmte Sprache und einen bestimmten level (der ist in der Tabelle items definiert) abfragen. Das sieht bisher so aus:
Code: (dl )
1
2
3
4
5
6
SELECT i.id, i.level, t.item_name, t.item_desciption
FROM items i, translations t
WHERE t.lang_code = 'en_US'
AND i.id = t.item_id
AND i.level = 3
ORDER BY t.name;

Alles prima solange alle Elemente übersetzt sind. Wenn nicht fehlt's eben und das ist nicht gut.

Andere Alternative wäre die Sprachklausel rauszuwerfen und nach Item-ID zu gruppieren:
Code: (dl )
1
2
3
4
5
6
SELECT i.id, i.level, t.item_name, t.item_desciption
FROM items i, translations t
WHERE i.id = t.item_id
AND i.level = 3
GROUP BY i.id
ORDER BY t.name;

Dann hab ich zwar immer einen String den ich anzeigen kann, aber dafür völliges Sprachkauderwelsch. Die zuerst in die Tabelle eingetragene Übersetzung für ein Item wird zurückgegeben.

Jetzt würde ich die beiden Varianten gerne kombinieren:
Wenn eine Übersetzung für die vorgegebene Sprache vorhanden ist soll die zurückgegeben werden, sonst eben die zuerst eingetragene.

Und ich steh' mit beiden Füssen auf'm Schlauch...

Edit: DB-Typ nachgetragen\n\n

<!--EDIT|Cremator|1138645368-->

View full thread SQL - Sprachauswahl WHERE-Klausel mit "Fallback"?: Geht sowas?