2016-05-03 17 views
0

Ich habe zwei Spalten in der gleichen Tabelle für meine Benutzer: name-displayed und short-name.MySQL: Ändern Spalte basierend auf Spaltenwerte in der gleichen Tabelle

wird mit dem vollständigen Namen des Benutzers ausgefüllt, z. B. "John Doe". In short-name gibt es den kurzen Wert, z.B. "John-Doe" (im Wesentlichen unkapitalisiert und getrennt). Wie würde ich die Daten in short-name basierend auf den Daten in name-displayed ändern? Ich bin mir sicher, dass ich einen Self-Join verwenden könnte, der auf UPDATE basiert, aber ich bin mir nicht sicher, wie man eine Änderung der Daten über die Spalten hinweg implementiert.

Jede Hilfe würde sehr geschätzt werden!

Antwort

0

Sie müssen dazu die Funktionen Lower und Replace verwenden. Siehe: Lower und Replace in der Dokumentation.

Update <table_name> 
    set `short-name` = REPLACE(LOWER(`name-displayed`), ' ','-') 
    where <conditions>; 

Falls Sie dies automatisch machen möchten, müssen Sie einen Trigger schreiben, wie Walter_Ritzel vorschlägt.

delimiter // 
CREATE TRIGGER auto_set_short_name BEFORE INSERT ON account 
FOR EACH ROW 
BEGIN 
    SET NEW.`short-name` = REPLACE(LOWER(`name-displayed`), ' ','-'); 

END;// 
delimiter ; 
+0

Dank Nosh - Erstellung eines Triggers nach Ihrer Syntax funktionierte perfekt. Danke noch einmal! – jusher

+0

Willkommen; Sie müssen es möglicherweise auch für "VOR UPDATE" tun. – Nosh

0

Sie könnten Auslöser verwenden: Triggers

Ein Trigger Vor Insert/Update so leicht lösen könnte.

delimiter // 
CREATE TRIGGER ins_sum BEFORE INSERT OR UPDATE ON table 
FOR EACH ROW 
begin 
    SET New.`short-name` = REPLACE(LOWER(NEW.`name-displayed`), ' ','-') ; 
end; 
// 

Verwenden oder Backticks dieses Zeichen: `` `, um sicherzustellen, dass die - nicht als Minuszeichen interpretiert wird.

+0

Hey @Walter_Ritzel, da '' '- Zeichen in den Tabellennamen sind, müssen Sie Backticks' '' verwenden – Nosh

-1
update table a join table b on a.id = b.id 
set a.short-name = b.name-displayed; 

Ich verstehe Sie name-angezeigt gleichen wie Kurznamen festlegen müssen, wenn dies nicht der Fall Pflege zu erklären ist. was willst du ändern ??

Verwandte Themen