2014-04-28 2 views
-1

У меня есть 2 таблицы,PHP, SQL вставить значение в таблицы, которые связаны друг с другом?

Таблица пользователей:
Columns-> идентификатор, имя, возраст, должность, отдел, телефон

Таблица Телефон: Столбцы идентификатор, u_id, u_phonetype (внешний ключ пользователя. id с каскадом delete и каскадом обновления).

Я хочу, чтобы выполнить эту вставку в SQL с u_phonetype из таблицы Телефон:

INSERT INTO `user` (`id`, `name`, `age`, `position`, `department`, 
`phone`) values ("'.$name.'", "'.$age.'", "'.$position.'", "'.$department.'", "'.$phone.'") ; 

Как вставить в значения u_phonetype в этом SQL? Будет ли я выполнять JOIN?

+0

Какие РСУБД, и уточнить ваш вопрос. – Strawberry

+0

Просто обычный mySQL – Noobtastic

+0

Вы не можете присоединяться к операторам INSERT, вам нужно добавить в таблицу пользователя, получить идентификатор пользователя, а затем вставить в телефонный стол. – DWolf

ответ

1

используя php, вам просто нужно использовать 2/3 запроса, чтобы это сделать.

// insert your user 
INSERT INTO users (columns) VALUES(vals); 

// get the last id 
SELECT id FROM users order by id desc limit 1 

// this is also work if you just do 
SELECT id FROM users where name='name' and age='age' "and whatever values you have"; 

// then insert into phone with the id retrieved from above 
INSERT INTO Phone (columns) VALUES(vals); 

3 шага процесса, но при той же связи с этим должно быть нормально

+0

Это условие гонки. Если вам случится сделать INSERT, а затем другой INSERT, за которым следует выбор для первого потока, он будет содержать идентификатор от второго пользователя, а не первый. Это можно смягчить с помощью транзакций или путем изменения SELECT, чтобы в нем было 'WHERE name = 'name''. – CanSpice

+0

Вы также сталкиваетесь с проблемами, если в таблице несколько экземпляров Джона Смита. По моему опыту с DBA, гонка лучше, чем захват чужого user_id, особенно с защищенными данными. – DWolf

+0

Это плохо информированный и бесполезный. – Strawberry

0

Что о


LAST_INSERT_ID(); 

INSERT INTO table1 (column1,column2) VALUES ('test', 1); 
SET @last_id_in_table1 = LAST_INSERT_ID(); 
INSERT INTO table2 (column3,column4,column5) VALUES (@last_id_in_table1, 2, 3); 

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