我在堆栈上搜索并尝试应用我找到的许多解决方案,但没有一个正在使用这个。
我对此查询有问题,因为ON DUPLICATE KEY UPDATE是INSERT新结果而不是更新现有结果。
INSERT INTO signal_providers_relations (
id,
client_id,
provider_id,
active_sp,
subscription_sp,
created_by,
cr_datetime,
ea_settings_active_sp,
ea_settings_sp,
up_datetime,
sp_risk_allocation,
sp_max_trades )
VALUES (
'',
'".$user_id."',
'".$r['provider_id']."',
'".$r['active_sp']."',
'".$r['subscription_sp']."',
'".$r['created_by']."',
'".$r['cr_datetime']."',
'".$r['ea_settings_active_sp']."',
'".$r['ea_settings_sp']."',
'".$r['up_datetime']."',
'".$r['sp_risk_allocation']."',
'".$r['sp_max_trades']."'
)
ON DUPLICATE KEY
UPDATE
id = '".$r['id']."'
client_id = '".$user_id."',
provider_id = '".$r['provider_id']."',
active_sp = '".$r['active_sp']."',
subscription_sp = '".$r['subscription_sp']."',
created_by = '".$r['created_by']."',
cr_datetime = '".$r['cr_datetime']."',
ea_settings_active_sp = '".$r['ea_settings_active_sp']."',
ea_settings_sp = '".$r['ea_settings_sp']."',
up_datetime = '".$r['up_datetime']."',
sp_risk_allocation = '".$r['sp_risk_allocation']."',
sp_max_trades = '".$r['sp_max_trades']."'
这是一个包含表格结构的图像
答案 0 :(得分:0)
假设此表包含特定于单个客户端/提供商关系的数据,那么您的UNIQUE
标识符确实是 client_id
和provider_id
的组合 - 所以您可以删除当前的client_id
和provider_id
INDEXES
,并将其替换为UNIQUE
复合索引。
ALTER TABLE `signal_providers_relations` DROP INDEX `client_id`;
ALTER TABLE `signal_providers_relations` DROP INDEX `provider_id`;
ALTER TABLE `test`.`signal_providers_relations`
ADD UNIQUE `unique_client_provider` (`client_id`, `provider_id`);
当您尝试为已存在的特定客户端/提供商组合插入数据时,这将为您提供 触发ON DUPLICATE KEY UPDATE
的特定唯一键,这就是我认为您正在努力实现。
此时,您很可能会删除无意义的id
列,并将刚刚创建的unique_client_provider
键更改为PRIMARY
- 但这可能会对其他人产生影响部分代码。
答案 1 :(得分:-1)
要避免这种情况,请在查询中使用REPLACE INTO而不是INSERT INTO