PHP MySql Вставить n строк одновременно? - PullRequest
0 голосов
/ 27 ноября 2009

Как мне оптимизировать этот код?

$items[0] = "Item-0";
$items[1] = "Item-1";
$items[2] = "Item-2";
$items[3] = "Item-3";
...
$items[n] = "Item-n";

foreach($items as $item) {
    mysql_query("INSERT INTO mytable (item) VALUES ('$item')");
}

Массив - это просто пример, и ключевой момент, который мне хотелось бы знать, - как я могу вставить n элементов без запроса n раз?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 27 ноября 2009

вы можете использовать многозначные операторы вставки

 insert into mytable(item) values('item1'),('item2') etc

http://dev.mysql.com/doc/refman/5.1/en/insert.html

1 голос
/ 27 ноября 2009

user187291 ответ правильный, однако я бы не просто построил одну массивную строку запроса.

После, скажем, 10 лотов значений, я запускаю вставку. Казалось бы, вероятность такого сбоя будет ниже, чем отправка огромного запроса в MySQL

.
$query = '';

foreach($items as $key => $item) {

     if ($key % 10) {
        // Reset and insert
     }



}
1 голос
/ 27 ноября 2009
INSERT INTO `mytable` (`item`) VALUES ('value 1'), ('value 2'), ('value 3')

Сформируйте, используя

$t = array("value 1", "value 2", "value 3");

$query = "('";
$query .= implode( "'), ('", $t);
$query .= "')";

echo $query;

Выходы ('value 1'), ('value 2'), ('value 3')

Теперь все, что вам нужно сделать, это вставить исходный запрос в этот вывод.

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