如何从php数组更新数据库表数据?

p3rjfoxz  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(406)

我需要从php数组更新mysql表数据库的信息。
我正在寻找实现这一点的最佳方法,我想做的是用新信息更新现有数据库表,这意味着可能有新行,现有行的字段中可能有新值,或者删除行。
我想的方法是:
删除当前表中的所有数据和行,然后再次插入包含php数组提供的最新数据的所有行。但我不知道这是否是一个昂贵的方法,或确实是使用。
我的另一个想法是,也许我可以检查行中的字段值是否已更改,如果是大小写,则更新值,还可以检查行的顺序,以检查是否删除了某些行并更改了顺序,最后如果是大小写,则插入新行,但我认为这会变得非常棘手和混乱。
你怎么认为?一些更好的方法的想法?谢谢你的支持。

8ehkhllq

8ehkhllq1#

您可以使用插入。。。复制密钥更新到 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');

?>
vom3gejh

vom3gejh2#

数据库管理系统可以为你做这件事。只需使用以下命令:

'INSERT INTO table ({target list}) VALUES({values}) ON DUPLICATE KEY UPDATE val1={value} , val2={value},...'

相关问题