Есть две одинаковых таблицы: data_tmp и data у которых есть по одной записи.
Можно ли как то скопировать все данные из data_tmp и data одним запросом? По сути выбрать все данные data_tmp и сделать апдейт в data?
Так как с таблицах очень много столбцов неудобно делать 2 запроса.
Попробуйте так
$result = mysqli_query($db, 'SELECT с1 ,с2 FROM data_tmp ') or die('error! Записей не найдено!');
while ($rows=mysqli_fetch_row($result)){
mysqli_query($db, "INSERT INTO data (p1 ,p2)
VALUES(
'".$rows[0]."','".$rows[1]."')")or die("Ошибка…". mysql_error());
}
Если порядок полей идентичен, то все делается одним запросом
INSERT INTO data SELECT * FROM data_tmp
но так делать сильно не рекомендуется, т.к. при изменении порядка полей у Вас будет каша без всяких сообщений.
В чем проблема получить список полей (хотя бы и забить руками), а потом сформировать запрос
$fields = 'fld1, fld2, fldn';
$sql = sprintf('INSERT INTO data (%s) SELECT %s FROM data_tmp', $fields, $fields);
Или выполнить запрос
SELECT * FROM data_tmp
а потом, на основании mysqli_stmt_result_metadata узнать имена полей и сформировать INSERT запрос?
UPDATE
Если нужно обновлять записи, то тогда нужно добавить конструкцию ON DUPLICATE KEY UPDATE
но тогда уже поля придется перечислять. Но опять таки, имея список полей ничего не стоит это сделать
function upd($val) {
return sprintf('$s = VALUES(%s)', $val, $val);
}
$fields = 'fld1, fld2, fldn';
$fld_upd = explode(',', $fields);
$fld_upd = array_map('upd', $fld_upd);
$fld_upd = implode($fld_upd);
$sql = sprintf(
'INSERT INTO data (%s) SELECT %s FROM data_tmp ON DUPLICATE KEY UPDATE %s',
$fields, $fields, $fld_upd
);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Не знаю как заставить сложить все элементы массива 1 разПодскажите каким оператором обозначить конец массива?