我想修改这个MySQL查询只插入行,如果它不存在。否则,我想更新现有行。
<?php
$query = mysql_query("UPDATE hqfjt_email_history SET datesent = ['datesent'],emailformname = ['emailformname'],leadname = ['leadname']
WHERE emailformname = ['emailformname'] AND leadname = ['leadname']") or die(mysql_error());
?>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~编辑>>
这对吗?
INSERT INTO hqfjt_email_history datesent = ['datesent'],emailformname = ['emailformname'],leadname = ['leadname'] ON DUPLICATE KEY UPDATE hqfjt_email_history SET datesent = ['datesent'],emailformname = ['emailformname'],leadname = ['leadname']
WHERE emailformname = ['emailformname'] AND leadname = ['leadname']
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我已经尝试了以上并得到错误:你有一个错误在你的SQL语法;查看与MySQL服务器版本对应的手册,以便在第1行'datesent = ['datesent'],emailformname = ['emailformname'],leadname = ['leadname "附近使用正确的语法
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
更新!好的,我试了一下,它创建了一个记录:
如果我这样做,什么都没有发生,没有更新或创建????:
<?php
$query = mysql_query("
INSERT INTO hqfjt_email_history (id, leadname, emailformname, datesent)
VALUES
('$_POST[id]','$_POST[leadname]','$_POST[emailformname]','$_POST[datesent]') ON DUPLICATE KEY UPDATE hqfjt_email_history (datesent) VALUES ('$_POST[datesent]') WHERE id = '$_POST[id]'");
?>
是,使用INSERT INTO ... ON DUPLICATE KEY UPDATE
语法。
您需要在表中定义一个类型为UNIQUE
或PRIMARY KEY
的键
还有REPLACE
它将更新现有的行,或者如果它不存在将创建一个新的行,语法也类似于INSERT
。
它做了INSERT ... ON DUPLICATE KEY UPDATE
所做的,但我认为这种方法更优雅。
是的,使用ON DUPLICATE KEY UPDATE
。下面是一个例子:
INSERT INTO <table> (<field1>, <field2>) VALUES (<value1>, <value2>)
ON DUPLICATE KEY UPDATE <field2> = 'update CONTENT';
important是主键(在phpMyAdmin表中下划线)
阅读此url
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html检查数据库emailformname和leadname是否唯一