我有一个像这样的数组$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 . = ;
}
请帮帮我
谢谢&问候
答案 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 KEY
或REPLACE 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。我明天会检查你的回复,看看我能提供什么帮助。