вставка кучи строк одним махом MySql
Есть супер пупер удобные JOIN, можно выборки делать колоссальные без цикличных запросов.
А если вставку нужно?
10 строк, отличаются 2мя индексами и собственно значениями.
вариант
Существует ли аналогия JOIN для INSERT ?
или только формировать запрос по типу
{
$sql .= "INSERT INTO a_table (id, val1, val1, def) VALUES (0, 2, 3, 'abracadabra') ON DUPLICATE KYE UPDATE def='abracadabra';" ;
}
mysql($sql);
???
Select из ниоткуда с union all. Если данные берутся из какой-то таблицы или запроса, проще воспользоваться второй формой оператора insert, в которой вместо values пишется обычный select.
А если значения генерируются программно, как в примере выше, лучше сделать процедуру на PHP и передавать ей нужные значения. Есть большие подозрения, что select с union all будет более затратен по ресурсам для MySQL, нежели несколько insert друг за другом, хоть и писанины на первый взгляд больше.
В нормальных СУБД есть ещё параметры aka подставляемые переменные (bind variables), но в MySQL они только в модных версиях появились. Или это не MySQL, а PDO... Короче, циклический insert с подставляемыми переменными -- самый правильный способ вставки программно генерируемых значений.
$sql = "INSERT INTO a_table (id, val1, val1, def) VALUES ";
while () {
$values[] = "'" . implode("', '", array(0, 2, 3, 'abracadabra')) . "'";
}
$sql .= '(' . implode('), (', $values) . ')';
mysql($sql);
Но вышеприведенный вариант не обрабатывает дублирование индексов. Если вам нужно это дело - советую посмотреть в сторону REPLACE, который совмещает вставку и апдейт строки, если уникальный ключ дублируется.