如果在更新多行时尚不存在行,如何插入行?

时间:2011-08-31 05:02:02

标签: php mysql case insert-update

我有一个MySQL查询,如下所示:

UPDATE `Table` SET `Column` = 
    CASE 
      WHEN `Option Id` = '1' THEN 'Apple'
      WHEN `Option Id` = '2' THEN 'Banana'
      WHEN `Option Id` = '3' THEN 'Q-Tip'
    END 

我的表目前看起来像这样:

Option Id | Column
        1 |      x
        2 |      x

我希望它导致:

Option Id | Column
        1 |  Apple
        2 | Banana
        3 |  Q-Tip

但它没有插入Q-Tip行。我已经查阅了一些关于INSERT ON DUPLICATE KEY UPDATEREPLACE的内容,但我找不到使用CASE让这些多行更新的方法。我是否必须为每一行编写单独的查询才能使其正常工作,或者在MySQL中有一个很好的方法吗?

Option Id本身不是Key,但它是Primary Key的一部分。

编辑更多信息:

我正在用PHP编程,基本上我正在为用户存储一个数组。 Option Id是关键,Column是值。所以为了简单起见,我的桌子看起来像:

User Id | Option Id | Value
     10 |         1 | Apple
     10 |         2 |  Shoe
     11 |         1 |  Czar
...

该用户可以轻松更新数组中的元素并添加新元素,然后将POST数组添加到服务器,在这种情况下,我想将其存储在表中。我上面的查询更新了他们编辑过的所有数组元素,但它没有插入新的数组元素。我想知道是否有一个查询可以从POST获取我的数组并将其插入表中,而不必编写循环并查询每个数组元素。

4 个答案:

答案 0 :(得分:2)

当然它没有插入。由于没有这样的价值,它无法更新。

我认为您通过输入已存在的值来规范化数据库,现在想为每个有效值添加所需的映射。

所以最好从头开始做INSERT。

答案 1 :(得分:2)

如果Option_Id是主键,这应该有效:

REPLACE INTO `Table` (`Option_Id`, `Column`) VALUES
(1, 'Apple'),
(2, 'Banana'),
(3, 'Q-Tip');

该语句表示:如果PK已存在,则插入给定行或替换值。

答案 2 :(得分:0)

您始终可以在数据库中查询条目,然后根据您的结果选择更新或插入

答案 3 :(得分:-1)

我认为这种更新没有意义 为什么没有带有选项ID和相应值的单独表格,只留下与此用户ID相关联的选项ID?