Есть две одинаковых таблицы: 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
);
Продвижение своими сайтами как стратегия роста и независимости