[sql] insert mit schlüsselverweisen / ersetzen

Dabei seit
Mai 2003
Beiträge
132
sers,
hab hier folgende abfrage die mir daten in ein datagrid ausgibt

Code:
    code:
    SELECT     trn_translations.trn_id, trn_translations.trn_german, lang_languages.lang_languagesign, trn_translations.trn_translation, trn_translations.trn_content, 
                          trn_translations.trn_frontend
    FROM         trn_translations INNER JOIN
                          lang_languages ON trn_translations.trn_langID = lang_languages.lang_id


besonderes ist halt dass wie gesehen trn_translations fast vollständig wiedergegeben wird. allerdings wird trn_translations.trn_langid durch lang_languages.land_id ersetzt, so dass statt LangID: 1 dann im datagrid LangID: DE steht.

nun will ich den prozess umgekehrt vollziehen sprich ein update fahren.

wie stell ich dasnu an ? besonderheit: eingebende user geben ins feld LangID dann ja zb DE ein und nicht 1. müsste ja also wieder über den schlüssel umgewandelt werden oder ?
 

ronin_sebastian

Ensign
Ersteller dieses Themas
Dabei seit
Mai 2003
Beiträge
132
Zitat von Benj:
Was genau willst du durch ein Update bewirken?
obiges select gibt mir ja die daten in etwa diesem syntax in ein dataset und von da aus in ein grid (VB)

23 | Dose | EN | Bin | 1 | 1 |

mittels des joins wird was in der trn_translations als "2" (3. Spalte) steht durch das EN aus der lang_languages ersetzt. so wie diese zeile sieht es der benutzer.

nun gibt der benutzer weitere daten in dieses grid ein. von da aus werden die beim speichern in ein dataset zurückgegeben und sollen dann in die trn_translations eingetragen werden.

allerdings wird er ja statt "2" z.B. "DE" eingeben. dies wird allerdings in der trn_translations nicht gespeichert weil dort int werte (also schlüssel) gespeichert werden.

deswegen soll der INSERT betreffenden wert ("DE") über den schlüssel wieder in ("1") umwandeln damit es in die tabelle trn_translations passt.
 

Sgt_H4rtman

Ensign
Dabei seit
Dez. 2003
Beiträge
249
So das hab ich nicht getestet, sollte aber prinzipiell funktionieren.

Dein Zauberwort heisst SubQuerys. Sofern der Server das unterstützt, ab MySQL 4.0 und alle anderen bekannten sowieso, ist das der Fall, müsstest Du folgenden Code verwenden können.

Code:
/* INSERT - Statement */
INSERT INTO trn_translations
	(trn_id, trn_german, trn_langID, trn_translation, trn_content, trn_frontend)
SELECT '23', 'Dose', lang_id, 'Bin', '1', '1'
FROM lang_languages
WHERE lang_languagesign like 'EN';

/* UPDATE - Statement */
UPDATE trn_translations
SET trn_langID = (SELECT lang_id FROM lang_languages WHERE lang_languagesign like 'EN')
WHERE trn_id = 23;

Ciao
 

Benj

Lt. Commander
Dabei seit
Okt. 2005
Beiträge
1.807
Mit Subqueries sollte es auf jeden Fall klappen, die Methode ist die Richtige; da hat mein Vorredner Recht.

Etwas unpräzise ist aber die Versionsangabe. Subquerys werden ab 4.1 unterstützt. Vorher (4.0x) nicht.
 

ronin_sebastian

Ensign
Ersteller dieses Themas
Dabei seit
Mai 2003
Beiträge
132
super funktioniert wunderbar :) vielen vielen dank!!!

werde das direkt mal in meine klasse einbauen.

nun gilts nur noch zu unterscheiden wie ich da festlege ob er n insert oder n update machen soll. aber das werde ich schon noch austüfteln.
 
Top