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

Форум MySQL

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

 

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

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

тема: Как вставить записи в несколько таблиц в одном запросе?
 
 автор: vtos   (14.05.2009 в 14:17)   письмо автору
 
 

Привет всем участникам форума!
Насколько известно, оператор INSERT не позволяет заносить записи сразу в несколько таблиц...
А как по-другому можно вставить данные в несколько таблиц в одном запросе?
Если есть такая ситуация: в первую таблицу вставляем некоторые записи, среди которых есть поле id1 (первичный ключ этой таблицы), и тут же надо вставить записи в другую таблицу, в которой тоже есть свой первичный ключ - поле id2, допустим, и это поле id2 должно принять значение поля id1 из первой таблицы... Именно это значение! Как это можно сделать, пусть даже и не одним запросом, а любым другим способом?
Заранее спасибо за участие!

  Ответить  
 
 автор: Ringo   (14.05.2009 в 17:05)   письмо автору
 
   для: 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) )) {
.............

  Ответить  
 
 автор: vtos   (15.05.2009 в 10:05)   письмо автору
 
   для: Ringo   (14.05.2009 в 17:05)
 

ОК, спасибо за ответ, про функцию mysql_insert_id() в PHP и функцию LAST_INSERT_ID() в самом MySQL знаю прекрасно, но вот вопрос - а если сразу же после вставки записи в таблицу оператором INSERT еще какой-нибудь клиент воткнет запись в таблицу, еще до того, как я прочитаю LAST_INSERT_ID() для "нужного" запроса INSERT, то что получится? Я как-бы прочитаю уже следующий LAST_INSERT_ID() - тот самый id, который "воткнулся" уже после "моего" запроса INSERT... ведь такое возможно... как-быть?
Надеюсь, понятно объяснил проблему...

  Ответить  
 
 автор: Valick   (15.05.2009 в 11:43)   письмо автору
 
   для: vtos   (15.05.2009 в 10:05)
 

неполучится...
попробуйте получить mysql_insert_id() без запроса INSERT.
поверьте неполучится.
Грубо говоря у каждого свой собственный LAST_INSERT_ID и только после вставки новой строки в таблицу

  Ответить  
 
 автор: vtos   (15.05.2009 в 12:21)   письмо автору
 
   для: Valick   (15.05.2009 в 11:43)
 

То есть не нужны все эти игры с блокировкой таблиц на время вставки (имею в виду LOCK TABLE, UNLOCK TABLE ивсе такое...), не будет пересечения id-шек в таблице?? Это в принципе невозможно?

  Ответить  
 
 автор: Valick   (15.05.2009 в 12:47)   письмо автору
 
   для: vtos   (15.05.2009 в 12:21)
 

блокировки не нужны, а вот исполнение второго запроса на вставку в другую таблицу Вам нужно контролировать. Если скрипт завершит работу а вставка оказалась неудачной свой ласт инсёрт айди вы потеряете

  Ответить  
 
 автор: umitay   (17.05.2009 в 01:37)   письмо автору
 
   для: vtos   (14.05.2009 в 14:17)
 

привет ,тебе надо делать первыи запрос через пхп,а последушие спомошью процедур или лутше тригеры ,на mysql server

  Ответить  
 
 автор: vtos   (18.05.2009 в 09:36)   письмо автору
 
   для: umitay   (17.05.2009 в 01:37)
 

привет., а можешь поподробней рассказать, или пример привести, очень интересный вопрос...

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

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