вставка массива значений - PullRequest
       7

вставка массива значений

2 голосов
/ 27 августа 2009

У меня есть массив с переменным количеством значений.

Есть ли более эффективный или лучший способ вставить их в мою БД, кроме цикла с запросом внутри него?

Ответы [ 3 ]

3 голосов
/ 27 августа 2009

На на этом сайте есть хороший пример MySQL с многостраничным запросом. Это это допустимый SQL для

INSERT INTO [table]
VALUES 
(row1),
(row2),
...

По запросу: фрагмент php:

$query="INSERT INTO mytable\nVALUES\n (".$values[0].")";
array_shift( $values );
foreach( $values as $value ) {
    $query .= ",(".$value.")";
}
2 голосов
/ 27 августа 2009

По моему опыту многострочные вставки обрабатываются НАМНОГО быстрее, чем эквивалентное число однострочных вставок, если вы вставляете большое количество данных за раз, это хороший способ. Я наблюдал, как с помощью этого метода процесс ввода тысяч строк данных сокращался от 5-10 минут до буквально секунд.

Что касается части кода, я был поклонником использования implode () для объединения массивов полей и значений. Нет причин, по которым вы не можете сделать то же самое для строк данных, вам просто нужно уметь определять, какие поля должны быть заключены в кавычки, экранированы и т. Д.

Ради аргумента предположим, что $ row - это массив правильно отформатированных значений SQL ...

$sql = "INSERT INTO `table` VALUES (" . implode("), (", $rows) . ")";

Вы можете применить что-то похожее, чтобы собрать отдельные поля, если хотите.

1 голос
/ 27 августа 2009

Если используемая БД допускает вставку нескольких значений, вы можете создать оператор множественной вставки и отправить его в БД - одно соединение с одной командой для выполнения множественной вставки.

Если вы не можете сделать несколько вставок - (поскольку MSSQL не позволяет) - тогда я думаю, что вы застряли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...