|
|
|
| Помогите пожалуйста составить запрос
В базе есть 2 таблицы. В одну записываем данные о фирме, в этой таблице есть свой первичный ключ – id. Во вторую таблицу заносится инфа о сотрудниках фирмы, в этой таблице есть свой первичный ключ (id) и есть поле, где должен хранится id фирмы из первой таблицы.
Как сделать запрос на добавление данных в эти 2 таблицы? Чтоб во второй таблице, где хранятся данные о сотрудниках, хранился код фирмы, в которой данный сотрудник работает. | |
|
|
|
|
|
|
|
для: nameIvan
(14.01.2010 в 09:38)
| | В table1 поле id - автоинкрементное
INSERT INTO table1(поля таблицы) VALUE(ваши значения)
//узнаете последний созданный id первой таблицы
$id = mysql_insert_id();
INSERT INTO table2(поля таблицы,id первой таблицы) VALUE(ваши значения,$id)
|
| |
|
|
|
|
|
|
|
для: Лена
(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 | |
|
|
|
|
|
|
|
для: nameIvan
(14.01.2010 в 14:39)
| | В чём заключается вопрос? | |
|
|
|
|
|
|
|
для: Лена
(14.01.2010 в 11:59)
| |
> INSERT INTO table1(поля таблицы) VALUE(ваши значения)
VALUES
|
| |
|
|
|
|
|
|
|
для: ~AquaZ~
(14.01.2010 в 14:47)
| | все получилось, спасибо | |
|
|
|
|
|
|
|
для: Лена
(14.01.2010 в 11:59)
| | А одним запросом нельзя? | |
|
|
|
|
|
|
|
для: Eugene77
(18.01.2010 в 15:55)
| | а зачем? | |
|
|
|
|
|
|
|
для: Eugene77
(18.01.2010 в 15:55)
| | А как это вы себе представляете? Опишите, пожалуйста. Откуда-то же мысль эта у вас появилась...
Я вот так, например, понимаю. Мы сначала делаем вставку в таблицу, где поле автоинкремент, а значит значение этого поля нам первоначально неизвестно. Сервер сам последовательно проводит нумерацию этого поля. Как же мы можем вставить во вторую таблицу значение этого поля, если оно первоначально нам неизвестно? Нам надо сначала его в первой таблице получить, а уж после использовать во второй таблице. Поэтому и два запроса. | |
|
|
|
|
|
|
|
для: Лена
(19.01.2010 в 00:03)
| | >А как это вы себе представляете? Опишите, пожалуйста. Откуда-то же мысль эта у вас появилась...
>Я вот так, например, понимаю. Мы сначала делаем вставку в таблицу, где поле автоинкремент, а значит значение этого поля нам первоначально неизвестно. Сервер сам последовательно проводит нумерацию этого поля. Как же мы можем вставить во вторую таблицу значение этого поля, если оно первоначально нам неизвестно? Нам надо сначала его в первой таблице получить, а уж после использовать во второй таблице. Поэтому и два запроса.
Раз PHP получает значение нового поля, то это значение находится в какой-то из переменных MySQL . Следовательно его можно использовать сразу, не дожидаясь ответа базы и не создавая лишнего траффика между базой и скриптом. | |
|
|
|
|
|
|
|
для: Eugene77
(20.01.2010 в 12:53)
| | Функцию LAST_INSERT_ID() видели?
Можете экономить на траффике :) | |
|
|
|
|
|
|
|
для: Trianon
(20.01.2010 в 13:12)
| | >Функцию LAST_INSERT_ID() видели?
>Можете экономить на траффике :)
Функцию я видел. Но не встречал примеров её использования.
Можно, конечно, попробовать примеры найти итд.
Но вопрос: а стоит ли из-за неё заморачиваться? - остаётся не ясным.
Ведь, действительно, можно и так как Лена пишет сделать.
Если спросить точнее, то так:
Можете ли вы утверждать, что такое разделение на два запроса к базе, всегда будет хорошим стилем программирования? | |
|
|
|
|
|
|
|
для: 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());
Из-за кого стоит?
Из-за надуманной проблемы? Не стоит всяко. | |
|
|
|
|
|
|
|
для: Trianon
(20.01.2010 в 13:42)
| | Спасибо! | |
|
|
|
|
|
|
|
для: Trianon
(20.01.2010 в 13:42)
| | подскажите что означает NOW() после LAST_INSERT_ID() и что NOW() означает в этом запросе? можно ли без этой функции запрос построить? | |
|
|
|
|
|
|
|
для: mister_pipin
(23.12.2011 в 00:13)
| | NOW() - это MySQL-функция, возвращающая текущее время. Обойтись можно, но если у вас календарный тип, то будет вставлено что-то вроде "1970-01-01 0:00:00". | |
|
|
|