Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

вставка кучи строк одним махом MySql

396
08 января 2012 года
SibBear
223 / / 27.07.2006
Искал. Искал, потому что когда то сам спрашивал. Не могу найти.

Есть супер пупер удобные JOIN, можно выборки делать колоссальные без цикличных запросов.
А если вставку нужно?
10 строк, отличаются 2мя индексами и собственно значениями.
вариант
Существует ли аналогия JOIN для INSERT ?
или только формировать запрос по типу
 
Код:
while ()
{
$sql .= "INSERT INTO a_table (id, val1, val1, def) VALUES (0, 2, 3, 'abracadabra') ON DUPLICATE KYE UPDATE def='abracadabra';" ;
}

mysql($sql);


???
10
09 января 2012 года
Freeman
3.2K / / 06.03.2004
Цитата: SibBear
Существует ли аналогия JOIN для INSERT ?


Select из ниоткуда с union all. Если данные берутся из какой-то таблицы или запроса, проще воспользоваться второй формой оператора insert, в которой вместо values пишется обычный select.

А если значения генерируются программно, как в примере выше, лучше сделать процедуру на PHP и передавать ей нужные значения. Есть большие подозрения, что select с union all будет более затратен по ресурсам для MySQL, нежели несколько insert друг за другом, хоть и писанины на первый взгляд больше.

В нормальных СУБД есть ещё параметры aka подставляемые переменные (bind variables), но в MySQL они только в модных версиях появились. Или это не MySQL, а PDO... Короче, циклический insert с подставляемыми переменными -- самый правильный способ вставки программно генерируемых значений.

79K
11 января 2012 года
SlevincheG
5 / / 11.01.2012
В вашем случае (если заранее известны все параметры всех вставляемых строк) лучше использовать множественную вставку:
 
Код:
$values = array();
$sql = "INSERT INTO a_table (id, val1, val1, def) VALUES ";
while () {
    $values[] = "'" . implode("', '", array(0, 2, 3, 'abracadabra')) . "'";
}
$sql .= '(' . implode('), (', $values) . ')';
mysql($sql);

Но вышеприведенный вариант не обрабатывает дублирование индексов. Если вам нужно это дело - советую посмотреть в сторону REPLACE, который совмещает вставку и апдейт строки, если уникальный ключ дублируется.
396
11 января 2012 года
SibBear
223 / / 27.07.2006
Да, я как раз REPLACE и сделал.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог