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

时间:2015-01-19 14:15:55

标签: 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'=>'7','val=>'Venta de Departamentos'), 
        [4] => array('id'=>'1','val=>'Venta de Terrenos') ) 

我必须在名为categoriasPlantilla

的表格中进行两次查询

然后表有三列

plantilla ,categoriaFeed, id

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

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

plantilla的值是11

我知道如何在一个查询中进行多次插入,但我如何构建这样的查询以进行更新?

首先,我正在考虑做这样的事情

$sql = "INSERT INTO categoriaplantilla (plantilla,categoriafeed,id) values ";
    $sqlUpdate = "UPDATE  categoriaplantilla ";
    foreach($feedArray as $key =>$val)
    {
        $sqlUpdate . =;
        $sql . = ;
    }

请帮帮我

谢谢&问候

2 个答案:

答案 0 :(得分:0)

您无法更新一个查询中设置的行。一行 - 一个查询。此外,你可以使用这样的东西

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,几乎无论如何都可能忘记了性能。

答案 1 :(得分:0)

大多数使用的解决方案都基于检查主键,例如INSERT INTO... ON DUPLICATE KEYREPLACE INTO...

但是,如果你正在检查你所提到的列categoriaFeed的非主键,我建议你可以使用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-statement更新或插入数据。

这可能是解决问题的有效方法。我在GMT+8时区,我现在要睡觉了,现在是下午23:00。我明天会检查你的回复,看看我能提供什么帮助。