Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: insert в 2 таблицы
 
 автор: nameIvan   (14.01.2010 в 09:38)   письмо автору
 
 

Помогите пожалуйста составить запрос
В базе есть 2 таблицы. В одну записываем данные о фирме, в этой таблице есть свой первичный ключ – id. Во вторую таблицу заносится инфа о сотрудниках фирмы, в этой таблице есть свой первичный ключ (id) и есть поле, где должен хранится id фирмы из первой таблицы.
Как сделать запрос на добавление данных в эти 2 таблицы? Чтоб во второй таблице, где хранятся данные о сотрудниках, хранился код фирмы, в которой данный сотрудник работает.

  Ответить  
 
 автор: Лена   (14.01.2010 в 11:59)   письмо автору
 
   для: nameIvan   (14.01.2010 в 09:38)
 

В table1 поле id - автоинкрементное

INSERT INTO table1(поля таблицы) VALUE(ваши значения)

//узнаете последний созданный id первой таблицы
$id = mysql_insert_id();

INSERT INTO table2(поля таблицы,id первой таблицы) VALUE(ваши значения,$id)

  Ответить  
 
 автор: nameIvan   (14.01.2010 в 14:39)   письмо автору
 
   для: Лена   (14.01.2010 в 11:59)
 

Спасибо. Еще вопрос возник.
  $query="INSERT INTO `ur` "."\n VALUES('','$firma','$kpp','$inn','$ind','$gorod','$street','$phone','$mail','$data','$dog')";

    //узнаете последний созданный id первой таблицы 
    $id = mysql_insert_id(); 

переменная $id хранит в себе 0

  Ответить  
 
 автор: ~AquaZ~   (14.01.2010 в 14:57)   письмо автору
 
   для: nameIvan   (14.01.2010 в 14:39)
 

В чём заключается вопрос?

  Ответить  
 
 автор: ~AquaZ~   (14.01.2010 в 14:47)   письмо автору
 
   для: Лена   (14.01.2010 в 11:59)
 

> INSERT INTO table1(поля таблицы) VALUE(ваши значения) 
                                   VALUES

  Ответить  
 
 автор: nameIvan   (14.01.2010 в 15:13)   письмо автору
 
   для: ~AquaZ~   (14.01.2010 в 14:47)
 

все получилось, спасибо

  Ответить  
 
 автор: Eugene77   (18.01.2010 в 15:55)   письмо автору
 
   для: Лена   (14.01.2010 в 11:59)
 

А одним запросом нельзя?

  Ответить  
 
 автор: Trianon   (18.01.2010 в 19:10)   письмо автору
 
   для: Eugene77   (18.01.2010 в 15:55)
 

а зачем?

  Ответить  
 
 автор: Лена   (19.01.2010 в 00:03)   письмо автору
 
   для: Eugene77   (18.01.2010 в 15:55)
 

А как это вы себе представляете? Опишите, пожалуйста. Откуда-то же мысль эта у вас появилась...
Я вот так, например, понимаю. Мы сначала делаем вставку в таблицу, где поле автоинкремент, а значит значение этого поля нам первоначально неизвестно. Сервер сам последовательно проводит нумерацию этого поля. Как же мы можем вставить во вторую таблицу значение этого поля, если оно первоначально нам неизвестно? Нам надо сначала его в первой таблице получить, а уж после использовать во второй таблице. Поэтому и два запроса.

  Ответить  
 
 автор: Eugene77   (20.01.2010 в 12:53)   письмо автору
 
   для: Лена   (19.01.2010 в 00:03)
 

>А как это вы себе представляете? Опишите, пожалуйста. Откуда-то же мысль эта у вас появилась...
>Я вот так, например, понимаю. Мы сначала делаем вставку в таблицу, где поле автоинкремент, а значит значение этого поля нам первоначально неизвестно. Сервер сам последовательно проводит нумерацию этого поля. Как же мы можем вставить во вторую таблицу значение этого поля, если оно первоначально нам неизвестно? Нам надо сначала его в первой таблице получить, а уж после использовать во второй таблице. Поэтому и два запроса.

Раз PHP получает значение нового поля, то это значение находится в какой-то из переменных MySQL . Следовательно его можно использовать сразу, не дожидаясь ответа базы и не создавая лишнего траффика между базой и скриптом.

  Ответить  
 
 автор: Trianon   (20.01.2010 в 13:12)   письмо автору
 
   для: Eugene77   (20.01.2010 в 12:53)
 

Функцию LAST_INSERT_ID() видели?
Можете экономить на траффике :)

  Ответить  
 
 автор: Eugene77   (20.01.2010 в 13:31)   письмо автору
 
   для: Trianon   (20.01.2010 в 13:12)
 

>Функцию LAST_INSERT_ID() видели?
>Можете экономить на траффике :)


Функцию я видел. Но не встречал примеров её использования.

Можно, конечно, попробовать примеры найти итд.
Но вопрос: а стоит ли из-за неё заморачиваться? - остаётся не ясным.
Ведь, действительно, можно и так как Лена пишет сделать.

Если спросить точнее, то так:
Можете ли вы утверждать, что такое разделение на два запроса к базе, всегда будет хорошим стилем программирования?

  Ответить  
 
 автор: Trianon   (20.01.2010 в 13:42)   письмо автору
 
   для: Eugene77   (20.01.2010 в 13:31)
 

я не знаю методик добавления строк в разные таблицы одним запросом.
Ну кроме как применяя хранимые процедуры (как вариант - триггеры) .

Вот Вам пример.
INSERT INTO tbl1 (message_txt) VALUES ('text');
INSERT INTO tbl2 (message_id, date_time) VALUES (LAST_INSERT_ID(), NOW());

Из-за кого стоит?
Из-за надуманной проблемы? Не стоит всяко.

  Ответить  
 
 автор: Eugene77   (20.01.2010 в 14:00)   письмо автору
 
   для: Trianon   (20.01.2010 в 13:42)
 

Спасибо!

  Ответить  
 
 автор: mister_pipin   (23.12.2011 в 00:13)   письмо автору
 
   для: Trianon   (20.01.2010 в 13:42)
 

подскажите что означает NOW() после LAST_INSERT_ID() и что NOW() означает в этом запросе? можно ли без этой функции запрос построить?

  Ответить  
 
 автор: cheops   (23.12.2011 в 00:32)   письмо автору
 
   для: mister_pipin   (23.12.2011 в 00:13)
 

NOW() - это MySQL-функция, возвращающая текущее время. Обойтись можно, но если у вас календарный тип, то будет вставлено что-то вроде "1970-01-01 0:00:00".

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования