(упрощенный вариант их, чтоб понимать суть)
--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
Спасибо, интересный вариант)))
Спасибо, интересный вариант)))