我遇到了问题,并测试了我在谷歌上找到的一些示例,但没有任何效果..
这是我的代码
INSERT INTO items (name, price, site, link, imagelink)
SELECT * FROM (SELECT %s, %s, %s, %s, %s) AS tmp
WHERE NOT EXISTS (
SELECT name FROM items WHERE name = %s
) LIMIT 1
这样,我的表格中就不会出现重复的项目(按名称)
我有以下字段:名称、价格、之前的价格、站点、链接、图像链接
如果名称与新插入内容相同且价格与表中已存在的价格不同,我想设置 pricebefore = Price
所以如果我有一个项目
name = iphone
price = 1000
现在获取同名商品的新价格
我想将旧价格设置为“pricebefore”,将新价格设置为“price”。
ON Duplicate KEY 不起作用或者我使用错误,导致链接每次都不同,导致 session 每次都向链接添加一些内容。因此 INSERT 永远不会相同(导致不同的链接),但它是相同的项目。
必须通过名称进行检查,如果价格不相同,则更新为新价格并将旧价格放入pricebefore
所以这肯定就像检查名称是否已经存在一样。 如果没有,则像我的示例一样插入。但如果存在,则将价格更新为新价格,并将当前价格更新为之前的价格
最佳答案
为name
添加唯一索引以防止重复。然后您可以使用ON DUPLICATE KEY
。
执行一次:
ALTER TABLE items ADD UNIQUE INDEX (name);
然后用它来插入:
INSERT INTO items (name, price, site, link, imagelink)
VALUES %s, %s, %s, %s, %s)
ON DUPLICATE KEY UPDATE
pricebefore = IF(price = VALUES(price), pricebefore, price),
price = VALUES(price);
如果 price
相同,IF
测试将阻止其更改 pricebefore
。
关于如果名称已存在但仅更新价格,则 MySQL 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58663665/