|
|
|
| Привет всем участникам форума!
Насколько известно, оператор INSERT не позволяет заносить записи сразу в несколько таблиц...
А как по-другому можно вставить данные в несколько таблиц в одном запросе?
Если есть такая ситуация: в первую таблицу вставляем некоторые записи, среди которых есть поле id1 (первичный ключ этой таблицы), и тут же надо вставить записи в другую таблицу, в которой тоже есть свой первичный ключ - поле id2, допустим, и это поле id2 должно принять значение поля id1 из первой таблицы... Именно это значение! Как это можно сделать, пусть даже и не одним запросом, а любым другим способом?
Заранее спасибо за участие! | |
|
|
|
|
|
|
|
для: vtos
(14.05.2009 в 14:17)
| | в mysql есть функция mysql_insert_id(); которая возвращает id записи. Этот id и используй для вставки в другую таблицу.
Пример сорри выдираю из кода: но разобраться можно.
$sql = 'INSERT INTO '.$this->table.' SET '.$arr_query.';';
$this->db->query($sql);
$insert_id = $this->db->insert_id();
$sql = 'INSERT INTO '.$this->table.' SET '.$arr_query.' WHERE id='.$insert_id .';';
$this->db->query($sql);
|
функции из бд класса.
function insert_id()
{
return mysql_insert_id($this->db_id);
}
function query($query, $show_error=true)
{
$time_before = $this->get_real_time();
if(!$this->connected) $this->connect(DBUSER, DBPASS, DBNAME, DBHOST);
if(!($this->query_id = mysql_query($query, $this->db_id) )) {
.............
|
| |
|
|
|
|
|
|
|
для: Ringo
(14.05.2009 в 17:05)
| | ОК, спасибо за ответ, про функцию mysql_insert_id() в PHP и функцию LAST_INSERT_ID() в самом MySQL знаю прекрасно, но вот вопрос - а если сразу же после вставки записи в таблицу оператором INSERT еще какой-нибудь клиент воткнет запись в таблицу, еще до того, как я прочитаю LAST_INSERT_ID() для "нужного" запроса INSERT, то что получится? Я как-бы прочитаю уже следующий LAST_INSERT_ID() - тот самый id, который "воткнулся" уже после "моего" запроса INSERT... ведь такое возможно... как-быть?
Надеюсь, понятно объяснил проблему... | |
|
|
|
|
|
|
|
для: vtos
(15.05.2009 в 10:05)
| | неполучится...
попробуйте получить mysql_insert_id() без запроса INSERT.
поверьте неполучится.
Грубо говоря у каждого свой собственный LAST_INSERT_ID и только после вставки новой строки в таблицу | |
|
|
|
|
|
|
|
для: Valick
(15.05.2009 в 11:43)
| | То есть не нужны все эти игры с блокировкой таблиц на время вставки (имею в виду LOCK TABLE, UNLOCK TABLE ивсе такое...), не будет пересечения id-шек в таблице?? Это в принципе невозможно? | |
|
|
|
|
|
|
|
для: vtos
(15.05.2009 в 12:21)
| | блокировки не нужны, а вот исполнение второго запроса на вставку в другую таблицу Вам нужно контролировать. Если скрипт завершит работу а вставка оказалась неудачной свой ласт инсёрт айди вы потеряете | |
|
|
|
|
|
|
|
для: vtos
(14.05.2009 в 14:17)
| | привет ,тебе надо делать первыи запрос через пхп,а последушие спомошью процедур или лутше тригеры ,на mysql server | |
|
|
|
|
|
|
|
для: umitay
(17.05.2009 в 01:37)
| | привет., а можешь поподробней рассказать, или пример привести, очень интересный вопрос... | |
|
|
|