Помогите с MySQL

malls
На сайте с 08.08.2005
Offline
255
552

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

Делаю раз:

	// $server_id - некоторое значение

// $answ - выполненый запрос к другой таблице
unset($query);
while ($row = mysql_fetch_row($answ)) {
// формируем запрос на добавление
$query = "INSERT INTO table(server_id,field_id) VALUES('".$server_id."','".$row[0]."');";
db($query);
}

Все чудно работает за исключение скорости - для каждой записи приходится делать обращение к мускулю, записей ок. 5000 - в общем долго...

Делаю два:

	// $server_id - некоторое значение

// $answ - выполненый запрос к другой таблице
unset($query);
while ($row = mysql_fetch_row($answ)) {
// формируем запрос на добавление
$query .= "INSERT INTO table(server_id,field_id) VALUES('".$server_id."','".$row[0]."');\n";
}
db($query);

Т.е. собираю все в один запрос и шлю его целиком - ТРАБЛА! Мускуль выдает ошибку...

mysql_query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; INSERT INTO table(server_id,field_id) VALUES('142','2'); INSERT INTO table' at line 1

Не могу понять в чем дело. Ограничение на размер запроса? Но дампы и поболе бывают.

Если во второй конструкции, в "$query .=" точку убрать, т.е. отправлять только одну запись (последнюю), опять таки все работает.

Linkpusher
На сайте с 28.12.2007
Offline
176
#1

как-то странно Вы инзерты склеиваете. зачем? проще поклеить новые валуесы и вставить их одним инзертом:

INTO table (server_id, field_id) VALUES $values";

где

$values = '('.$server_id1.', '.$row1[0].'), ('.$server_id2.', '.$row2[0].')';

Точу ножи. Буквально. Есть отзывы. Заказать заточку в МСК и Подольске можно через Телеграмм.
Слава Шевцов
На сайте с 23.07.2005
Offline
370
#2

Юзайте копирование данных одним запросом:

$query = "INSERT INTO table(server_id,field_id) SELECT $server_id, field_id FROM ...";

db($query);

Неизменность точки зрения неизменно порождает иллюзию понимания.
Linkpusher
На сайте с 28.12.2007
Offline
176
#3

$values = array();

while ($row = mysql_fetch_row($answ))
{
$values[] = '('.$server_id.', '.$row[0].')';
}
$values = implode(',', $values);

как-то так...

Слава Шевцов, мы же не знаем, вдруг у malls одна таблица и в селекте и в инзерте :)

malls
На сайте с 08.08.2005
Offline
255
#4
Слава Шевцов:
Юзайте копирование данных одним запросом:

$query = "INSERT INTO table(server_id,field_id) SELECT $server_id, field_id FROM ...";
db($query);

Ай Слава - БОГ!

Сеньк! Так гораздо красивее!

Всем спасибо! Славе особенно! :)

N
На сайте с 06.05.2007
Offline
419
#5
toxic steel:
мы же не знаем, вдруг у malls одна таблица и в селекте и в инзерте

с этим уже давно нет никаких проблем. в 4.1 и выше.

Кнопка вызова админа ()

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий