За последние 24 часа нас посетили 17277 программистов и 1297 роботов. Сейчас ищут 1830 программистов ...

LAST_INSERT_ID

Тема в разделе "MySQL", создана пользователем saider2011, 20 янв 2023.

  1. saider2011

    saider2011 Новичок

    С нами с:
    17 дек 2021
    Сообщения:
    15
    Симпатии:
    1
    подскажите, написал php код
    PHP:
    1. $array_variants=$array_POST['variants'];
    2. for($i=1;$i<=count($array_variants);$i++){
    3. $variants_array=$array_variants[$i];
    4. $insert_sql_variants[$i]="('{$insert_ID}','{$variants_array['url']}','{$variants_array['color']}','{$variants_array['position']}')";
    5. $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']}')";
    6. }
    7.  
    8. db_query("INSERT INTO haracteristik_variants (parent_id, url, color, position) VALUES ".implode(', ', $insert_sql_variants));
    9. db_query("INSERT INTO haracteristik_variants_description (id, variant, description, page_title, meta_keywords, meta_description) VALUES ".implode(', ', $insert_sql_description));
    только вот при добавлении записи я отправляю запрос вот с такой комбинацией
    PHP:
    1. LAST_INSERT_ID()+$i-1
    Правильно ли mysql отправлять так запрос?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.852
    Симпатии:
    746
    Адрес:
    Татарстан
    Че за бред...
    Обычно id автоинкремент, и не надо ничего вычислять и использовать last_insert_id
     
  3. saider2011

    saider2011 Новичок

    С нами с:
    17 дек 2021
    Сообщения:
    15
    Симпатии:
    1
    У меня первая таблица с автоинкрементом а во второй в id записываю присвоенное значение из первой, я хотел так сделать чтобы автоинкремент был одинаков в обеих таблицах
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    Лучше брать «last insert id» из результата первого INSERT'а и уже чисто на пыхе формировать последовательность-копию. Вдруг функция внутри INSERT'а использует значение не пред. INSERT'а, а текущего.
     
  5. saider2011

    saider2011 Новичок

    С нами с:
    17 дек 2021
    Сообщения:
    15
    Симпатии:
    1
    есть вод такой способ, все зациклить, только вот на сколько быстрым будет запрос я не знаю и как то криво смотрится, хотя и работает как надо :)
    PHP:
    1. $array_variants=$array_POST['variants'];
    2. for($i=1;$i<=count($array_variants);$i++){
    3. $variants_array=$array_variants[$i];
    4. $insert_sql_variants="INSERT INTO haracteristik_variants (parent_id, url, color, position) VALUES('{$insert_ID}','{$variants_array['url']}','{$variants_array['color']}','{$variants_array['position']}')";
    5. db_query($insert_sql_variants);
    6.  
    7. $id_sql_variants=$mysqli->insert_id; // получаем id записи в таблице haracteristik_variants
    8.  
    9. $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']}')";
    10. db_query($insert_sql_description);
    11. }
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    Это понятный способ. Я писал про многострочный INSERT, но с использованием mysqli::$insert_id.
    --- Добавлено ---
    Заодно и реальное кол-во вставленных первым запросом строк можно получать (часто пользовательские ф-ции вставки возвращают это кол-во в качестве результата). Многострочный INSERT может не все строки вставлять. С «дублирующимися ключами» не вставляет. Без IGNORE прекращает выполнение при первом же дубле.
    --- Добавлено ---
    Что касается for, меня учили его использовать при оч. большом кол-ве строке. А внутри цикла может быть многострочный INSERT с относительно небольшим кол-вом.
    --- Добавлено ---
    Может, при этом и откат норм. вставленных строк происходит. Не помню. Нужно проверить.
     
  7. saider2011

    saider2011 Новичок

    С нами с:
    17 дек 2021
    Сообщения:
    15
    Симпатии:
    1
    Я понял, короче второй вариант исполнения с циклом будет лучше всего
     
  8. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.852
    Симпатии:
    746
    Адрес:
    Татарстан
    Запомните - запоосы в циклах этот зло....
     
  9. saider2011

    saider2011 Новичок

    С нами с:
    17 дек 2021
    Сообщения:
    15
    Симпатии:
    1
    Но порой без них никуда не деться
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    Я бы посмотрел на исходную задачу. Многострочные сохранения из формы – это обычно зло. Лучше сохранить отдельными строками, включая зависимости, или даже отдельными полями строк ;)
    --- Добавлено ---
    P.S. Многострочный INSERT обычно используется при импорте, а не при обычным добавлении строк. Причем импорт часто выполняется, как фоновая задача, или при выполнении с Web-морды делится на порции, запись которых выполняется по командам с клиента при помощи JS/AJAX.