gpt4 book ai didi

php - MySql,在重复更新时插入

转载 作者:行者123 更新时间:2023-11-29 07:13:58 24 4
gpt4 key购买 nike

我有一个包含 3 列的表 (price_flow)。我用来记录产品的价格流向:

row_id (int, primary, ai) | product_id (int) | price (int) | update_date (date)
1 | 1234 | 302 | 2016-07-22
2 | 923 | 153 | 2016-07-25
3 | 1234 | 290 | 2016-07-28
4 | 923 | 170 | 2016-07-28
5 | 1111 | 111 | 2016-07-28
...

基本上,当搜索产品价格的 php 脚本运行时,最后它会在 mysql 表中插入一个新行(如果是新的一天)或更新该行(如果该日期产品价格已被记录)。所以我使用了“插入重复更新”查询(表在product_id x update_date上有一个唯一索引)。我的查询是:

$aid = 1234; //Model ID
$date = date('Y-m-d'); //Current date
$pmin = 210; //Price
$query = "INSERT INTO price_flow (model_id, update_date, price)
VALUES($aid, '$date', $pmin) ON DUPLICATE KEY
UPDATE price=$pmin";

它工作正常,但我现在想做的是仅当价格与同一产品的其他价格一致时更新/插入价格(脚本找到的结果并不总是准确的)。所以我想价格绝对不会低于以前的一半。所以我用了

$query = "INSERT INTO price_flow (model_id, update_date, price) 
SELECT $aid, $date, $pmin FROM price_flow WHERE model_id=$aid AND price<".(2*$pmin)."
ORDER BY date DESC LIMIT 1 ON DUPLICATE KEY
UPDATE price=291 WHERE price <".(2*$pmin).";"

因此,如果插入的最后价格不小于新价格的两倍(因此,新价格小于或等于最后价格的一半),则不会插入或更新新价格。存在两个问题:1)查询语法错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE price <420' at line 1 

2)如果是新产品,没有以前的记录,则不会插入新行(因为这个 SELECT $aid, $date, $pmin FROM price_flow WHERE model_id=$aid AND price<".(2*$pmin)."

我该如何解决这个问题?谢谢

最佳答案

你有两个 where 子句,这完全是一个语法错误。如果您需要有条件地更新 on dupe key 中的一个字段,请按以下步骤操作:

... UPDATE price=IF(price < 2*$pmin, 291, price)

关于php - MySql,在重复更新时插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38642473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com