Как обновить данные таблицы базы данных из массива PHP? - PullRequest
0 голосов
/ 23 декабря 2018

Мне нужно обновить информацию базы данных таблицы mysql из массива php.

Я ищу лучший подход для этого, я хочу обновить существующую таблицу базы данных новой информацией, это означает, что могут быть новые строки, существующие строки могут иметь новыезначения в их полях или удаленные строки.

Подходы, о которых я думаю:

  1. Удалите все данные и строки из текущей таблицы и снова вставьте все строки с помощьюсамые последние данные, предоставляемые массивом php.Но я не знаю, является ли это дорогостоящим подходом или он действительно используется.
  2. Другая идея, которая у меня есть, заключается в том, что, возможно, я мог бы проверить, изменились ли значения полей из строк, и если это такзатем обновите значения, также проверьте порядок строк, чтобы проверить, были ли удалены некоторые строки и изменен ли порядок, и, наконец, вставьте новые строки, если это так, но я думаю, что это будет действительно сложно и грязно.

Что ты думаешь?Некоторые идеи для лучшего подхода?Спасибо за вашу поддержку.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Вы можете использовать INSERT ... ON DUPLICATE KEY UPDATE до INSERT новых строк и UPDATE существующих строк.

Пример:

INSERT INTO t1 (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE a=1,b=2,c=3;

Вы должны построить оператор DELETE, используя несколько трюков в php.

Пример:

<?php

$data = array(
    array( 'a'=>1, 'b'=>2, 'c'=>3 ),
    array( 'a'=>4, 'b'=>5, 'c'=>6 ),
    array( 'a'=>7, 'b'=>8, 'c'=>9 ),
);

$condition = implode( ',', array_map( function($temp){return sprintf("('%s','%s','%s')",$temp['a'],$temp['b'],$temp['c']);},$data));
$sql = "DELETE FROM t1 WHERE (a,b,c) NOT IN (" . $condition . ");";
echo $sql; // DELETE FROM t1 WHERE (a,b,c) NOT IN (('1','2','3'),('4','5','6'),('7','8','9'));

// OR

$condition1 = implode( ',', array_map( function($temp){return sprintf("'%s'",$temp['a']);},$data));
$sql1 = "DELETE FROM t1 WHERE a NOT IN (" . $condition1 . ");";
echo $sql1; // DELETE FROM t1 WHERE a NOT IN ('1','4','7');

?>
0 голосов
/ 23 декабря 2018

СУБД может сделать это за вас.Просто используйте команду:

  'INSERT INTO table ({target list}) VALUES({values}) ON DUPLICATE KEY UPDATE val1={value} , val2={value},...'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...