如果名称已存在但仅更新价格,则 MySQL 更新

标签 mysql

我遇到了问题,并测试了我在谷歌上找到的一些示例,但没有任何效果..

这是我的代码

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/

相关文章:

mysql - 如何比较同一个表中的两行,但列小于和大于数字

mysql - 使用 MySQL 连接三个表

php - 使用数据库搜索并显示结果

java - 在 Spring 中创建自定义查询

sql - 如何优化此 SQL 选择查询?

mysql - Rails 从 Webrick 和 LightSQL 切换到 MySQL 和 Apache

php - 在 insert_batch codeigniter 中捕获错误

php - 模特不参加

mysql - 如何在MYSQL表中为每个用户提供唯一的数据,但另一个用户可以拥有相同的数据?

mysql - 根据行号更新表格