php - SQL : INSERT if no exist and UPDATE if exist

标签 php mysql sql database insert

我有一个可以对数据库执行插入和更新的程序,我从 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/

相关文章:

PHP 在 sql 查询中使用变量

php - 在 Laravel 中的何处插入强制性业务数据

php - mysql关键字搜索全文

php - 将简单的新闻以表格形式插入数据库 - 保存 <br>

sql - MS Access 中的多字段关系

mysql - 对两个字段的数据进行排序

php - 如何使用 php 运行具有多个创建命令的 sql 文件,而无需手动解析 sql 文件?

php - 使用变量作为高度和宽度的值

php - Laravel 5.1 在表单请求验证之前修改输入

mysql - 将复杂逻辑转换为 MySQL CASE 语句