如果存在更新,则基于WHERE子句插入

时间:2013-05-30 06:22:53

标签: php mysql sql

此查询通过在其中使用多个检查来更新数据库表。问题是我想在那个星期和一天中针对顾问ID插入所有缺失的行。

UPDATE agenda
SET comments = 1
WHERE  term_id = 31
  AND day IN ( 1, 3 )
  AND week IN ( 1, 3, 4 )
  AND consultant_id IN ( 1, 2, 3) 

例如,数据库中有一行consultant_id=3 and week=1 which has no day=2,我想插入具有consultant_id=3 ,week=1, day=2 and comments=1的新行。 如果行consultant_id=3 ,week=1, day=2 exist,则只需更新注释。

我尝试使用的内容ON DUPLICATE KEY this related ticket 但问题是我在数组中有consultant_id个,weekday,我必须根据这三个更新注释。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

是否必须在一个查询中?

解决方案可能是(伪代码):

$result = query("UPDATE agenda
    SET comments = 1
    WHERE  term_id = 31
       AND day IN ( 1, 3 )
       AND week IN ( 1, 3, 4 )
       AND consultant_id IN ( 1, 2, 3) ");
if (affected_rows($result) == 0) {
  // do insert query
}

答案 1 :(得分:-1)

我认为您的查询是正确的,但如果您提供的示例反映了您的表格,那么查询将不会更新任何内容。

您希望使用consultant_id=3 ,week=1, day=2 and comments=1更新表格。

在您的查询中,您将此语句AND day IN ( 1, 3 ) 这意味着您将天数限制为只有一天和三天。因此day=2将无法满足条件,这意味着更新将无效。

如果要添加新记录,请改用insert语句。