代码之家  ›  专栏  ›  技术社区  ›  Eric

如何执行条件SQL insert语句?

  •  0
  • Eric  · 技术社区  · 14 年前

    我对MySQL完全不熟悉。我试图编写一个查询,将一行插入表中,但前提是前一行是5分钟前插入的。另外,我希望我的PHP代码能够以某种方式知道是否插入了数据。这是我的尝试:

    IF (SELECT max(EntryDate) from MyTable) < DATE_SUB(CURRENT_DATE() INTERVAL 5 MINUTE) THEN
       INSERT INTO MyTable (...) values (...)
    ELSE
       Select false
    END IF
    

    不幸的是,但并不意外的是,这会产生语法错误(错误对于问题的位置非常模糊)。

    我在做蠢事吗?

    3 回复  |  直到 12 年前
        1
  •  5
  •   webbiedave    13 年前

    使用 WHERE NOT EXISTS 并检查是否与 > 时间-5分钟。

    INSERT INTO MyTable (column1, column2) 
    SELECT value1, value2 FROM DUAL
    WHERE NOT EXISTS (SELECT * 
                      FROM MyTable 
                      WHERE EntryDate > DATE_SUB(NOW(), INTERVAL 5 MINUTE))
    
        2
  •  4
  •   Dan Grossman    14 年前

    运行SELECT查询,查看程序中的结果,然后决定是否运行INSERT查询。

    //Ask for how many rows are less than 5 minutes old
    $count = mysql_result(mysql_query("SELECT COUNT(*) FROM MyTable WHERE MAX(EntryDate) > CURRENT_TIMESTAMP - INTERVAL 5 MINUTE"),0);
    if ($count == 0) {
        mysql_query("INSERT INTO...");
        //I know I just INSERTed a row because I'm inside the conditional!
    }
    
        3
  •  0
  •   Eric    14 年前

    我不确定MySQL的语法,但您可能需要在这一部分用括号括起来:
    (SELECT max(EntryDate) from MyTable) < DATE_SUB(CURRENT_DATE() INTERVAL 5 MINUTE