Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2015, 21:37   #1
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию Можно ли в один запрос объединить вставку в MySql в моем примере

При вставке одной записи:
Код:
$sql = mysqli_query($link,"  INSERT INTO `register`(`id`, `login`, `md5_password`,`email`,`status`,`1`,`2`,`3`,`N xoda`,`data`) 
VALUES ('$id','$login_','$md5_password_xesh',
'$email_',
'$status',
'$_1','$_2','$_3','$N_xoda',
CURRENT_TIMESTAMP)");
По качто это не массив,а переменные, но сделал
массивы: '$id','$login_','$md5_password_xesh ','$email_',
состоят из 50 индексов, а
'$status','$_1','$_2','$_3','$N_xod a',
из 15.

Даже если я приведу все массивы по одинаковое количество индексов, можно объединить это все в одном запросе?

В инете много похожего нашел, но приближенно к моей задаче пока что не нашел.

Последний раз редактировалось Illusiony; 22.01.2015 в 21:41.
Illusiony вне форума Ответить с цитированием
Старый 22.01.2015, 21:53   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Можно добавлять сразу несколько записей одним запросом.
Синтаксис:
PHP код:
"INSERT INTO `table_name` (`field_1`, `field2`, ..., `field_N`) 
 VALUES 
     ('value_1_1', 'value_1_2', ..., 'value_1_N'),
     ('value_2_1', 'value_2_2', ..., 'value_2_N'),
     ...,
     ('value_N_1', 'value_N_2', ..., 'value_N_N')

Andkorol вне форума Ответить с цитированием
Старый 22.01.2015, 22:24   #3
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Можно добавлять сразу несколько записей одним запросом.
Синтаксис:
PHP код:
"INSERT INTO `table_name` (`field_1`, `field2`, ..., `field_N`) 
 VALUES 
     ('value_1_1', 'value_1_2', ..., 'value_1_N'),
     ('value_2_1', 'value_2_2', ..., 'value_2_N'),
     ...,
     ('value_N_1', 'value_N_2', ..., 'value_N_N')

Да, но это здесь явно перечисление значений.
Как сделать чтобы они из массивов php заполнялись?
вместо:
('value_1_1', 'value_1_2', ..., 'value_1_N')
Как сделать так чтобы прошло по всем массивам:
$value_1_2,$value_1_1,$value_1_3 и остальным.
Illusiony вне форума Ответить с цитированием
Старый 22.01.2015, 22:27   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Используй циклы, Люк ©
Andkorol вне форума Ответить с цитированием
Старый 22.01.2015, 22:35   #5
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Используй циклы, Люк ©
Циклы это несколько запросов, а мне нужно чтобы в одном.
Illusiony вне форума Ответить с цитированием
Старый 22.01.2015, 22:40   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Запрос – это строка.
Часть этой строки, которая содержит множество повторяющихся фрагментов ('value_1_1', 'value_1_2', ..., 'value_1_N') – очень просто можно формировать при помощи циклов.
Andkorol вне форума Ответить с цитированием
Старый 22.01.2015, 22:46   #7
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

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

А вроде направление понял. Буду думать . Спасибо.

Последний раз редактировалось Illusiony; 22.01.2015 в 22:52.
Illusiony вне форума Ответить с цитированием
Старый 22.01.2015, 23:02   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Элементарный пример формирования запроса при помощи цикла:
PHP код:
$sql "INSERT INTO `table_name` (`field_1`, `field2`, ..., `field_N`) VALUES ";
$insert = array();
for(
$i 1$i <= 10$i++)
{
    
$insert[] = "('value_" $i "_1', 'value_" $i "_2', ..., 'value_" $i "_N')";
}
$sql $sql implode(", "$insert);
var_dump($sql); 
Результат:
PHP код:
"INSERT INTO `table_name` (`field_1`, `field2`, ..., `field_N`) 
VALUES 
('value_1_1', 'value_1_2', ..., 'value_1_N'), 
('value_2_1', 'value_2_2', ..., 'value_2_N'), 
('value_3_1', 'value_3_2', ..., 'value_3_N'), 
('value_4_1', 'value_4_2', ..., 'value_4_N'), 
('value_5_1', 'value_5_2', ..., 'value_5_N'), 
('value_6_1', 'value_6_2', ..., 'value_6_N'), 
('value_7_1', 'value_7_2', ..., 'value_7_N'), 
('value_8_1', 'value_8_2', ..., 'value_8_N'), 
('value_9_1', 'value_9_2', ..., 'value_9_N'), 
('value_10_1', 'value_10_2', ..., 'value_10_N')" 
Никакой каши нет – всё просто и понятно.
Аналогично можно использовать готовые массивы значений и foreach, например.

Последний раз редактировалось Andkorol; 22.01.2015 в 23:07. Причина: Ну раз ты понял направление...))
Andkorol вне форума Ответить с цитированием
Старый 23.01.2015, 15:59   #9
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Спасибо. Получилось, но не сразу. Несколько ошибок связанных с типами полей было.
Illusiony вне форума Ответить с цитированием
Старый 23.01.2015, 18:32   #10
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Когда делал заполнение второй таблицы возникла ошибка:
Код:
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 '' at line 2
Никак не могу понять ее смысл. Причем тут какие то двойные кавычки? в первой таблицы аналогично и нету такой ошибки.

Вот материалы:
Код:
$sql =" INSERT INTO `check` (`id`, `ip`)  
VALUES ";
$insert_check = array();
$s=0;
for($i = 0; $i < count($res_for_table_check); $i++)
{	
	for($j = 0; $j <3; $j++)
	{
    $insert_check[] = " (".$s.",INET_ATON('".$res_ip[$s]."')";
	$s++;
	}
}
$sql = $sql . implode(", ", $insert_check);
Код:
var_dump($sql);
Код:
 " INSERT INTO `check` (`id`, `ip`) VALUES (0,INET_ATON('190.148.93.224'), (1,INET_ATON('37.253.142.193'), (2,INET_ATON('242.219.68.214'), (3,INET_ATON('142.41.141.29'), (4,INET_ATON('5.79.211.224'), (5,INET_ATON('251.19.106.219'), (6,INET_ATON('29.45.4.210'), (7,INET_ATON('178.21.196.140'), (8,INET_ATON('6.200.178.30'), (9,INET_ATON('131.74.227.242'), (10,INET_ATON('99.74.42.55'), (11,INET_ATON('167.156.199.47'), (12,INET_ATON('199.178.124.41'), (13,INET_ATON('104.129.185.166'), (14,INET_ATON('254.206.67.87'), (15,INET_ATON('102.220.2.192'), (16,INET_ATON('182.157.67.72'), (17,INET_ATON('64.0.134.239'), (18,INET_ATON('114.234.145.74'), (19,INET_ATON('114.119.78.247'), (20,INET_ATON('1.2.50.190'), (21,INET_ATON('108.76.232.174'), (22,INET_ATON('246.115.219.54'), (23,INET_ATON('88.181.254.80'), (24,INET_ATON('131.244.214.244'), (25,INET_ATON('178.195.142.151'), (26,INET_ATON('10.61.255.39'), (27,INET_ATON('36.180.177.48'), (28,INET_ATON('104.51.42.203'), (29,INET_ATON('63.10.25.72'), (30,INET_ATON('240.67.99.48'), (31,INET_ATON('50.240.171.213'), (32,INET_ATON('23.48.222.126'), (33,INET_ATON('5.219.139.154'), (34,INET_ATON('156.113.146.218'), (35,INET_ATON('9.69.166.233'), (36,INET_ATON('185.2.221.180'), (37,INET_ATON('29.93.180.180'), (38,INET_ATON('57.62.43.254'), (39,INET_ATON('85.17.160.134'), (40,INET_ATON('186.227.174.20'), (41,INET_ATON('185.199.182.60'), (42,INET_ATON('156.208.189.229'), (43,INET_ATON('239.181.229.175'), (44,INET_ATON('122.96.201.120')"
Код:
$sql = mysqli_query($link,$sql);
Illusiony вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
один mysql запрос для двух рядов. dimron PHP 4 09.06.2011 15:21
Объединить запрос к нескольким таблицам в один (php+MySql) Maxx PHP 17 23.08.2010 16:32
Как выполнить запрос на вставку в MySql? Mixasik SQL, базы данных 1 21.11.2009 22:18
как можно объединить два массива в один новый? sqwerty Общие вопросы C/C++ 3 11.06.2009 23:50
Запрос на вставку данных в таблицу (Проблема непустых ячеек) Ramires SQL, базы данных 3 02.10.2008 08:03