php - 使用条件逻辑: check if record exists; if it does,更新它,如果没有,则创建它

标签 php sql postgresql concurrency

我昨晚问了这个问题,并获得了有关合并的信息(在 postgresql 中不可用)。我愿意尝试 the workaround suggested 但我只是想理解为什么它不能用条件逻辑来完成。

我已经澄清了这个问题,所以也许这会更容易理解。

我有一个将数据插入表中的查询。但每次都在创造新纪录。有没有办法先检查该行是否存在,然后检查是否存在 UPDATE ,如果不存在 INSERT

$user = 'username';
$timestamp = date('Y-m-d G:i:s.u');
$check_time = "start"; //can also be stop
$check_type = "start_user"; //can also be stop_user

$insert_query = "INSERT INTO production_order_process_log (
   production_order_id, production_order_process_id, $check_time, $check_type)
VALUES (
 '$production_order_id', '$production_order_process_id', '$timestamp', '$user')";

这个想法是表将记录 checkin 和 checkout 值( production_order_process_log.startproduction_order_process_log.stop )。因此,在创建带有 checkout 时间戳的记录之前,查询应检查 $production_order_process_id 是否已存在。如果确实存在,则时间戳可以进入 stop ,并且 $check_type 可以是 stop_user 。否则,它们可以保留 startstart_user

我基本上是想避免这种结果。

+----+---------------------+--------------------------------+--------------------+-------------------+-------------+-------------+
| id | production_order_id |   production_order_process_id  |        start       |        stop       | start_user  |  stop_user  |
+----+---------------------+--------------------------------+--------------------+-------------------+-------------+-------------+
| 8  | 2343                |   1000                         |  12 july 03:23:23  | NULL              | tlh         |  NULL       |
+----+---------------------+--------------------------------+--------------------+-------------------+-------------+-------------+
| 9  | 2343                |   1000                         | NULL               | 12 july 03:45:00  | NULL        |  tlh        |
+----+---------------------+--------------------------------+--------------------+-------------------+-------------+-------------+

非常感谢您帮助我弄清楚 postgresql 逻辑来完成这项任务。

最佳答案

您会对这个问题和答案感兴趣:Insert, on duplicate update in PostgreSQL?

基本上,要么使用两个查询(执行选择,如果发现更新,否则插入),这不是最好的解决方案(同时运行的两个脚本可能会产生重复的插入),或者按照上述问题的建议进行操作 - 制作一个存储过程/函数来做到这一点(这可能是最好的选择,也是最简单的)。

关于php - 使用条件逻辑: check if record exists; if it does,更新它,如果没有,则创建它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11570172/

相关文章:

php - 我的新闻推送方式有哪些是错误的?

SQL Server 2008 datetime类型时间比较

sql - 在jsp中以表格形式显示数据

sql - 将数据合并为一行

postgresql - 如何用 SQLAlchemy 反射(reflect)类型?

php - 更改数据库中ENUM的值

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

sql - 你如何计算忽略年份的日期数学?

php - 使用 Codeigniter 启动项目

c# - 为什么SqlDataAdapter.Update只能调用一次?