我想修改此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());
?>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ 编辑&gt;&gt;
这是正确的吗?
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服务器版本对应的手册,以便在'datesent = ['datesent']附近使用正确的语法,emailformname = ['emailformname'],在第1行引导名= ['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]'");
?>
答案 0 :(得分:3)
是的,请使用INSERT INTO ... ON DUPLICATE KEY UPDATE
语法。
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
您需要在UNIQUE
或PRIMARY KEY
类型的表格中定义一个键。
答案 1 :(得分:3)
还有REPLACE。
哪个会更新现有行,或者如果它不存在则会创建一个新行,语法也类似于INSERT
。
它与INSERT ... ON DUPLICATE KEY UPDATE
完全相同,但我认为这种方法更优雅。
答案 2 :(得分:1)
是的,请使用ON DUPLICATE KEY UPDATE
为此。这是一个例子:
INSERT INTO <table> (<field1>, <field2>) VALUES (<value1>, <value2>)
ON DUPLICATE KEY UPDATE <field2> = 'update CONTENT';
重要的是主键(在phpMyAdmin表中加下划线)。
答案 3 :(得分:0)
阅读此网址
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
检查数据库emailformname和leadname是否唯一