【问题标题】:MySQL If exsists insert into or else do something elseMySQL If exists insert into or else do something else
【发布时间】:2011-11-21 09:41:02
【问题描述】:

我在将条件放入 MySQL 时遇到了一些困难。我一直在尝试创建一个查询,它将遍历所有标题为电子邮件的列,如果它存在,我想做这样的事情: 如果存在电子邮件,我希望它采用正确的列的现有值并将 php 变量 $correct 添加到它。但是,如果电子邮件不存在,那么我希望它将值 $email 的新记录添加到列 email 中,并将 $correct 添加到列中。任何帮助将不胜感激。
以下是我拥有和不工作的内容:

IF  (SELECT * FROM facebookqs WHERE email = '$email' > 0)
UPDATE facebookqs SET correct = correct + '$correct' where email ='$email' 
Else
Insert into facebookqs (email, correct) VALUES ('$email', '$correct')

【问题讨论】:

标签: mysql insert conditional


【解决方案1】:

使用REPLACE 方法,此处解释:http://blogs.coldbuffer.com/inserting-or-updating-records-using-mysql-replace 来自他们的示例:

REPLACE INTO pet (id, type, name) VALUES(1, 'Dog', 'Pluto');

你的例子应该是(还没有测试过)

REPLACE INTO facebookqs (email, correct) VALUES ('$email', '$correct');

【讨论】:

    【解决方案2】:

    假设email 有一个UNIQUE 约束,你应该使用INSERT ... ON DUPLICATE KEY UPDATE

    INSERT INTO facebookqs (email, correct) VALUES ('$email', '$correct')
    ON DUPLICATE KEY UPDATE correct = correct + '$correct'
    

    另请参阅我对其他 Stack Overflow 问题的回答:INSERT IGNORE vs INSERT … ON DUPLICATE KEY UPDATE

    【讨论】:

      【解决方案3】:

      您缺少EXISTS 语句以及IF 中的THENEND IF

      IF  (EXISTS(SELECT * FROM facebookqs WHERE email = '$email')) THEN
        UPDATE facebookqs SET correct = correct + '$correct' WHERE email ='$email';
      ELSE
        INSERT INTO facebookqs (email, correct) VALUES ('$email', '$correct');
      END IF;
      

      【讨论】:

      • 谢谢,这看起来更像我想要做的,但我仍然得到一个 sql 语法错误 =/
      • 它说:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'IF (EXISTS(SELECT * FROM facebookqs WHERE email = 'test')) THEN UPDATE faceb' 附近使用正确的语法
      • 如果您注意到我不小心删除了更新语句中的 WHERE 子句和电子邮件列名之间的空格。如果您逐字复制我的代码,也许这就是您的问题。
      • 是的,我注意到了,但仍然不起作用。似乎一旦存在部分出现,我就会从错误开始。
      • @Trey 你是用这个IF语句代替mysql的存储过程吗?我犯了同样的错误并且遇到了语法错误。您必须在其中创建一个包含此 IF 块的存储过程。见stackoverflow.com/a/18288088
      【解决方案4】:

      您只需要选择电子邮件列吗?或者您是否有多个包含电子邮件地址的列?如果您有多个包含电子邮件的列,那么您需要说 where col1Email = '$email' 或 col2Email='$email'... 等等。要计算行数,请尝试 从 facebookqs 中选择 COUNT(*),其中 col1Email = '$email' 或 col2Email='$email'。

      【讨论】:

        猜你喜欢
        • 2014-04-27
        • 2013-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-08
        • 2012-08-08
        • 1970-01-01
        相关资源
        最近更新 更多