2010-05-05 2 views
0

У меня есть база данных drupal, где node таблица полна профилей. Поле node.title - «Имя Фамилия». Я хочу отделить имена так, чтобы node.title = «Имя», а в другой таблице полностью, content_type_profile.field_lastname_value = «Фамилия». Записи в двух таблицах могут быть объединены в поле nid.MySQL: как отделить поле имени в одной таблице от имени/имени в двух отдельных таблицах?

Я хотел бы запустить команду SQL для этого, и я в порядке с наивным подходом, что первое слово - это имя, а все остальное в поле - фамилия - это будет означать немного ручных исправлений вниз по линии, но это намного лучше, чем делать все это вручную.

(я прочитал this question и, конечно же, ответ лежит там, но я не то, что SQL-подкованных, и я не знаю, как заставить его работать на моей базе данных.)

Спасибо!

ответ

3

Вы можете заменить «John Smith» фактическим именем столбца из вашей таблицы, но это должно дать вам общую идею.

select substring('John Smith',1,instr('John Smith',' ')-1) first_name; 

select substring('John Smith',instr('John Smith',' ')+1) last_name; 

EDIT:

Вот полный рабочий пример. Я сделал это на Oracle, так как у меня нет drupal, но, надеюсь, синтаксис должен быть схожим.

CREATE TABLE content_type_profile (nid number,field_lastname_value VARCHAR2(20)); 
CREATE TABLE node (nid number,title VARCHAR2(20)) 

DELETE FROM node; 
INSERT INTO node VALUES (1, 'John Smith'); 
INSERT INTO node VALUES (2, 'Jane Doe'); 

DELETE FROM content_type_profile; 
INSERT INTO content_type_profile VALUES (1,NULL); 
INSERT INTO content_type_profile VALUES (2,NULL); 

UPDATE content_type_profile c 
    SET field_lastname_value = 
     (SELECT SUBSTR(n.title,instr(n.title,' ')+1) 
     FROM node n 
     WHERE n.nid = c.nid); 

SELECT * FROM content_type_profile; 
// returns 2 rows, one for Smith and one for Doe 

UPDATE node 
    SET title = SUBSTR(title,1,instr(title,' ')-1); 

SELECT * FROM node; 
// returns 2 rows, one for John and one for Jane 
+0

ОК, поэтому я использую «select substring (node.title, 1, instr (node.title, '') -1) first_name;"? Но как мне заставить его вставить это в другую таблицу? – Eileen

+0

Я не думаю, что вы хотите «вставить», я думаю, вы хотите «обновить». См. Выше для полного примера. – dcp

+0

Perfect - мне пришлось добавить несколько дополнительных WHERE, чтобы ограничить эффект, но он сделал именно то, что я надеялся. Спасибо за помощь! – Eileen

Смежные вопросы