【问题标题】:Insert or Update with mysql if same two column如果两列相同,则使用 mysql 插入或更新
【发布时间】:2019-09-09 07:57:44
【问题描述】:

我有一个表来存储客户的答案。我想使用一个 mysql 查询来插入或更新这个表。 我的表名称:questionform_answer 和列 > ClientID QuestionID OptionID

每个客户端只能有一个相同的问题ID。例如

 ClientID QuestionID OptionID
    1         1         1
    1         2         5
    2         1         3

如果已经存在 ClientID 和 QuestionID,我想更新 OptionID。我不想使用选择查询,所以要花点时间。 我试过了

     ON KEY UPDATE
     Replace Into

但我做不到。 我使用 php,所以我尝试了第一次更新查询,如果 mysqli 返回失败插入行,但它也很慢。 我的插入和更新代码:

   Insert Into questionform_answer (ClientID,QuestionID,OptionID) values 
   ('$ClientID','$soruid','$cevapid')


   Update questionform_answer set OptionID='$cevapid' where 
   ClientID='$ClientID' and QuestionID='$soruid'

【问题讨论】:

    标签: mysql insert sql-update


    【解决方案1】:

    解决此问题的一种方法是在(ClientID, QuestionID) 上添加一个唯一键并使用INSERT ... ON DUPLICATE KEY UPDATE 查询:

    ALTER TABLE table1
    ADD UNIQUE INDEX (ClientID, QuestionID);
    
    INSERT INTO table1
    VALUES (1, 1, 4)
    ON DUPLICATE KEY UPDATE
    OptionID = VALUES(OptionID)
    

    Demo on dbfiddle

    【讨论】:

    • 如何删除此客户 ID 和问题 ID 的重复条目? @尼克
    • @johnny003 表中是否已有重复项?
    • 是的。我想使用带有记录但现有重复的旧表@Nick
    • @johnny003 这应该会有所帮助:stackoverflow.com/questions/4685173/…
    • OKey 我用 exel 删除它
    【解决方案2】:

    首先,您应该使用准备好的语句来避免 SQL 注入。 如果您在 (ClientID,QuestionID) 上有一个唯一键,您可以像这样执行 INSERT INTO ... ON DUPLICATE KEY:

    INSERT INTO questionform_answer (ClientID,QuestionID,OptionID) 
                values ('$ClientID','$soruid','$cevapid') 
    on duplicate key update OptionID='$cevapid'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      相关资源
      最近更新 更多