将多个值插入同一列名+覆盖/更新现有条目?

时间:2011-08-22 11:39:27

标签: php mysql arrays loops

这是一个非常相关的2部分问题,因此我将其合并为一个:

第1部分

我有数组$country$redirect,每个数组最多有3个不同的值(它们之间的总和为6)。

但是,我的表格中只有两列countryredirect。我想使用插入查询将$country[0], $country[1], etc插入列country,将$redirect[0], $redirect[1], etc插入redirect列。

这可能是一个愚蠢的问题,但这个INSERT查询是否有效,只是将值循环到列?

INSERT INTO table_name (country, redirect) values ('$country[0]', '$redirect[0]', '$country[1]', '$redirect[1]', '$country[2]', '$redirect[2]')

如果没有,我怎么能让这个工作?我可以使用for循环,但我担心资源使用情况。


第2部分

如何覆盖/更新列country的值已存在的行。

例如,Great Britain已经存在于country列中http://en-gb位于同一行但位于redirect列内。

我有一个INSERT查询,例如INSERT INTO table_name (country, redirect) VALUES ('Great Britain', 'http://uk'),我想用Great Britain覆盖/更新countryredirect已存在的行{{1}}值。

任何答案/评论都会非常,非常非常感激:)!!

1 个答案:

答案 0 :(得分:4)

对于你的第一个问题,这样做是可行的:

INSERT INTO table_name (country, redirect) 
VALUES ('$country[0]', '$redirect[0]'), 
       ('$country[1]', '$redirect[1]'), 
       ('$country[2]', '$redirect[2]')

关于第二个问题:country上需要unique index,然后才能使用INSERT ON DUPLICATE KEY UPDATE

INSERT INTO table_name (country, redirect) VALUES ('Great Britain', 'http://uk')
  ON DUPLICATE KEY UPDATE redirect='http://uk';

或者有多个值:

INSERT INTO table_name (country, redirect) 
VALUES ('$country[0]', '$redirect[0]'), 
       ('$country[1]', '$redirect[1]'), 
       ('$country[2]', '$redirect[2]')
ON DUPLICATE KEY UPDATE redirect=VALUES(redirect)