Php 如何在Mysql中更新和插入多行

Php 如何在Mysql中更新和插入多行,php,mysql,Php,Mysql,我有一个类似这样的数组$feedArray Array ( [0] => array('id'=>'3','val=>'Renta Comerciales'), [1] => array('id'=>'4','val=>'Renta de Casas'), [2] => array('id'=>'6','val=>'Venta de Casas '), [3] => array('id'=

我有一个类似这样的数组
$feedArray

Array ( [0] => array('id'=>'3','val=>'Renta Comerciales'),
        [1] => array('id'=>'4','val=>'Renta de Casas'),
        [2] => array('id'=>'6','val=>'Venta de Casas '),
        [3] => array('id'=>'7','val=>'Venta de Departamentos'), 
        [4] => array('id'=>'1','val=>'Venta de Terrenos') ) 
$sql = "INSERT INTO categoriaplantilla (plantilla,categoriafeed,id) values ";
    $sqlUpdate = "UPDATE  categoriaplantilla ";
    foreach($feedArray as $key =>$val)
    {
        $sqlUpdate . =;
        $sql . = ;
    }
我必须在一个名为
categoriasPlantilla

然后这个表有三列

plantilla ,categoriaFeed, id
我必须检查表的
categoriaafeed
列中是否存在数组的
val
,然后我必须用数组id更新该id

如果没有,那么我必须在表中插入新行

plantilla的值为11

我知道如何在一个查询中执行多个insert,但如何构建这样一个用于更新的查询

首先,我想做这样的事情

Array ( [0] => array('id'=>'3','val=>'Renta Comerciales'),
        [1] => array('id'=>'4','val=>'Renta de Casas'),
        [2] => array('id'=>'6','val=>'Venta de Casas '),
        [3] => array('id'=>'7','val=>'Venta de Departamentos'), 
        [4] => array('id'=>'1','val=>'Venta de Terrenos') ) 
$sql = "INSERT INTO categoriaplantilla (plantilla,categoriafeed,id) values ";
    $sqlUpdate = "UPDATE  categoriaplantilla ";
    foreach($feedArray as $key =>$val)
    {
        $sqlUpdate . =;
        $sql . = ;
    }
请帮帮我


感谢和问候

您不能更新一个查询中设置的行。一行-一个查询。还有,你可以用这样的东西

UPDATE table SET field1='aaa', field2='bbb' where id IN (1, 2,4).
但此查询将为每行设置相等的数据。 有时候我用这个

INSERT INTO table(field1, field2) VALUES ('aaa', 'bbb')
ON DUPLICATE KEY
UPDATE SET field1='aaa', field2='bbb' where id IN (1, 2,4)

ps如果您在查询中使用PK,您几乎在任何情况下都可能忘记性能。

使用的大多数解决方案都是基于检查主键,如插入到。。。在重复键上,或将替换为…

但是,如果您正在检查非主键,如您所提到的column
categoriaafeed
,我建议您可以使用mysql函数创建一个mysql过程来实现这一点

基本代码应如下所示:

DROP PROCEDURE IF EXISTS func;

DELIMITER //
CREATE PROCEDURE func()
BEGIN
    IF '123' in ('Renta Comerciales', 'Renta de Casas', 'Venta de Casas') THEN
        UPDATE `may` SET `fone` = 'aaaaa' WHERE `id` = 1;
    ELSE
        INSERT INTO `may` VALUES ('1','2','3');
    END IF;
END//
DELIMITER ;

CALL func();
123
等于您的
val
,您可以检查它是否在给定数组中。然后您可以通过
if语句
更新或插入数据


这可能是解决问题的一个有用方法。我在格林尼治标准时间+8时区,我现在要睡觉了,现在是晚上23点。明天我会查看您的回复,看看我能帮上什么忙。

使用
替换为
怎么样,我更改了列,Plantilla和categoriaafeed to primary key
替换为
最像
插入到
,唯一的区别是它会检查您插入的新记录的pk是否存在于您的旧记录中。如果是,将删除旧的,然后插入新的。