[sql] insert mit schlüsselverweisen / ersetzen

Registriert
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 ?
 
Benj schrieb:
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.
 
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
 
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.
 
Zurück
Oben