[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Занесение данных в две связанные по id таблицы
Jack_White
Всем привет, у меня имеются две таблицы в базе:
(упрощенный вариант их, чтоб понимать суть)

--user
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
login VARCHAR(41) NOT NULL UNIQUE COMMENT 'Логин',
pass CHAR(32) NOT NULL COMMENT 'Пароль';
-------------------------------------------------------------------------
--user_data
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
f_id INT UNSIGNED NOT NULL COMMENT 'id из табл user',
name VARCHAR(26) NOT NULL COMMENT 'имя польз.';


При добавлении пользователя сначала заносятся данные в таблицу user, а затем
в таблицу data с добавлением f_id (id из табл user). Как это правильней реализовать? Нашел несколько способов:
1)в самом MYSQL - LAST_INSERT_ID();
но тогда получается 3 запроса и если будут регистрироваться несколько пользователей может быть конфликт, так как читал что LAST_INSERT_ID() может вести себя неккоректно.
2)использовать mysql_insert_id(), но это опять несколько запросов...
Наверняка кто-нибудь сталкивался с подобной задачей, можно ли составить один запрос?
Заранее благодарен...



Спустя 11 минут, 17 секунд (12.01.2012 - 14:31) Игорь_Vasinsky написал(а):
2)использовать mysql_insert_id(), но это опять несколько запросов...

Спустя 4 минуты, 22 секунды (12.01.2012 - 14:36) Jack_White написал(а):
Игорь_Vasinsky
Спасибо, не подскажешь какие-нибудь хорошие источники по этой теме?

Спустя 1 минута, 58 секунд (12.01.2012 - 14:38) Игорь_Vasinsky написал(а):
я гуглом формирую себе что почитать, так быстрее - не нужно по сайту разыскивать.

Спустя 1 минута, 46 секунд (12.01.2012 - 14:40) Jack_White написал(а):
Ясно, спасибо

Спустя 17 минут, 55 секунд (12.01.2012 - 14:57) Placido написал(а):
Ну, думаю, так как информация заносится в две таблицы, то запросов необходимо как минимум два. Одним заносим login, pass в табл. user, а вторым - f_id и name в user_data. А чтобы не было конфликтов с LAST_INSERT_ID(), можно использовать подзапрос:
INSERT INTO `user` (`login`, `pass`) VALUES ('логин', 'пароль'); 
INSERT INTO `user_data` (`f_id`, `name`) VALUES ((SELECT `id` FROM `user` WHERE `login` = 'логин'), 'имя польз.');

Спустя 5 минут, 24 секунды (12.01.2012 - 15:03) Jack_White написал(а):
Placido
Спасибо, интересный вариант)))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.