我有一个可以对数据库执行插入和更新的程序,我从 API 获取数据。 这是我得到的示例数据:
$uname = $get['userName'];
$oname = $get['offerName'];
$visitdata= $get['visits'];
$convdata = $get['conversion'];
我将这些数据保存到数据库sql中。 (成功)这是一个示例:
$sql = "INSERT INTO data_tester(username_data, name_offer_data, visit_data, conversion_data) VALUES('$uname','$oname', '$visitdata', '$convdata')";
Sample data in database table
id | username_data | name_offer_data | visit_data | conversion_data 1 | MOJOJO | XXX AU | 177 | 13 2 | MOJOJO | XX US | 23 | 4
现在,我想保存数据$uname, $oname, $visitdata, $convdata
(如果不存在)并更新$visitdata, $convdata
,其中$ uname, $oname
如果存在
如何通过简单的查询运行代码。 请给我一个例子。 谢谢。
最佳答案
您正在寻找的功能名为 UPSERT它是SQL-2008标准的一部分。然而,并非所有 DBMS 都实现它,有些 DBMS 的实现方式有所不同。
例如在 MySQL 上您可以使用:
INSERT ... ON DUPLICATE KEY UPDATE
语法 ( link to docs ) 或
REPLACE INTO
语法 (link to docs)。
这些方法要求您在您的情况下拥有正确的主键:(username_data name_offer_data)。
如果您使用 ActiveRecord(或类似)类,一些 PHP 框架也支持此功能。在 Laravel 中它被称为 updateOrCreate在 Yii 中它被称为 save() 。因此,如果您正在使用框架,请尝试检查其文档。
如果您既不使用框架也不使用现代 DBMS,则必须自己实现该方法。运行SELECT count(*) from data_tester WHERE username_data = ? AND name_offer_data = ?
,检查它是否返回任何行并调用适当的 UPDATE/INSERT sql
关于php - SQL : INSERT if no exist and UPDATE if exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37920669/