подскажите, написал php код PHP: $array_variants=$array_POST['variants']; for($i=1;$i<=count($array_variants);$i++){ $variants_array=$array_variants[$i]; $insert_sql_variants[$i]="('{$insert_ID}','{$variants_array['url']}','{$variants_array['color']}','{$variants_array['position']}')"; $insert_sql_description[$i]="(LAST_INSERT_ID()+$i-1,'{$variants_array['variant']}', '{$variants_array['brand_description']}', '{$variants_array['page_title']}', '{$variants_array['meta_keywords']}', '{$variants_array['meta_description']}')"; } db_query("INSERT INTO haracteristik_variants (parent_id, url, color, position) VALUES ".implode(', ', $insert_sql_variants)); db_query("INSERT INTO haracteristik_variants_description (id, variant, description, page_title, meta_keywords, meta_description) VALUES ".implode(', ', $insert_sql_description)); только вот при добавлении записи я отправляю запрос вот с такой комбинацией PHP: LAST_INSERT_ID()+$i-1 Правильно ли mysql отправлять так запрос?
У меня первая таблица с автоинкрементом а во второй в id записываю присвоенное значение из первой, я хотел так сделать чтобы автоинкремент был одинаков в обеих таблицах
Лучше брать «last insert id» из результата первого INSERT'а и уже чисто на пыхе формировать последовательность-копию. Вдруг функция внутри INSERT'а использует значение не пред. INSERT'а, а текущего.
есть вод такой способ, все зациклить, только вот на сколько быстрым будет запрос я не знаю и как то криво смотрится, хотя и работает как надо PHP: $array_variants=$array_POST['variants']; for($i=1;$i<=count($array_variants);$i++){ $variants_array=$array_variants[$i]; $insert_sql_variants="INSERT INTO haracteristik_variants (parent_id, url, color, position) VALUES('{$insert_ID}','{$variants_array['url']}','{$variants_array['color']}','{$variants_array['position']}')"; db_query($insert_sql_variants); $id_sql_variants=$mysqli->insert_id; // получаем id записи в таблице haracteristik_variants $insert_sql_description="INSERT INTO haracteristik_variants_description (id, variant, description, page_title, meta_keywords, meta_description) VALUES('{$id_sql_variants}','{$variants_array['variant']}', '{$variants_array['brand_description']}{$variants_array['page_title']}', '{$variants_array['meta_keywords']}', '{$variants_array['meta_description']}')"; db_query($insert_sql_description); }
Это понятный способ. Я писал про многострочный INSERT, но с использованием mysqli::$insert_id. --- Добавлено --- Заодно и реальное кол-во вставленных первым запросом строк можно получать (часто пользовательские ф-ции вставки возвращают это кол-во в качестве результата). Многострочный INSERT может не все строки вставлять. С «дублирующимися ключами» не вставляет. Без IGNORE прекращает выполнение при первом же дубле. --- Добавлено --- Что касается for, меня учили его использовать при оч. большом кол-ве строке. А внутри цикла может быть многострочный INSERT с относительно небольшим кол-вом. --- Добавлено --- Может, при этом и откат норм. вставленных строк происходит. Не помню. Нужно проверить.
Я бы посмотрел на исходную задачу. Многострочные сохранения из формы – это обычно зло. Лучше сохранить отдельными строками, включая зависимости, или даже отдельными полями строк --- Добавлено --- P.S. Многострочный INSERT обычно используется при импорте, а не при обычным добавлении строк. Причем импорт часто выполняется, как фоновая задача, или при выполнении с Web-морды делится на порции, запись которых выполняется по командам с клиента при помощи JS/AJAX.