让我们假设我们有表项目 ...
table: items
item_id INT PRIMARY AUTO_INCREMENT
title VARCHAR(255)
views INT
让我们想象它充满了像
这样的东西(1, item-1, 10),
(2, item-2, 10),
(3, item-3, 15)
我想根据从此数组中获取的数据为此项目生成多更新视图[item_id] => [观点]
'1' => '50',
'2' => '60',
'3' => '70',
'5' => '10'
重要!请注意,我们在数组中有item_id = 5,但我们在数据库中没有item_id = 5.
我可以使用 INSERT ... ON DUPLICATE KEY UPDATE ,但这样image_id = 5将插入到talbe项目中。如何避免插入新密钥?我只想跳过item_id = 5,因为它不在表格中。
当然,在执行之前我可以从items表中选择现有的键;然后与数组中的键进行比较;删除不存在的密钥并执行 INSERT ... ON DUPLICATE KEY UPDATE 。但也许有一些更优雅的解决方案?
谢谢。
答案 0 :(得分:5)
您可以尝试通过加入表来生成文字表并更新项目:
UPDATE items
JOIN (SELECT 1 as item_id, 50 as views
UNION ALL
SELECT 2 as item_id, 60 as views
UNION ALL
SELECT 3 as item_id, 70 as views
UNION ALL
SELECT 5 as item_id, 10 as views
) as updates
USING(item_id)
SET items.views = updates.views;