我昨晚问了这个问题,并获得了有关合并的信息(在 postgresql 中不可用)。我愿意尝试建议的解决方法但我只是想了解为什么它不能用条件逻辑来完成。
我已经澄清了这个问题,所以也许这会更容易理解。
我有一个将数据插入表的查询。但它每次都在创造新的记录。有没有办法我可以先检查该行是否存在,然后是否存在,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')";
这个想法是该表将记录签入和签出值(production_order_process_log.start
和production_order_process_log.stop
)。因此,在生成带有签出时间戳的记录之前,查询应该检查是否$production_order_process_id
已经存在。如果它确实存在,那么时间戳可以进入stop
并且$check_type
可以是stop_user
。否则,他们可以留下start
来start_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 逻辑来完成这项任务。