不知道怎么问这个,但我有一个产品数据库及其价格。价格包括3列(当前价格,折扣价,以前的价格)。
我使用fgetcsv()读取新记录的CSV,然后使用下面的Mysqli查询将新记录插入或更新到我的数据库:
$query = "INSERT INTO products (prodname,currprice,prevprice,discprice) VALUES ('$EachRow[0]','$EachRow[1]','$EachRow[2]','$EachRow[3]') ON DUPLICATE KEY UPDATE currprice='$EachRow[1]';";
问题出在现有产品上。我只想更新他们的价格,如果他们的价格不同于currprice并更新它们,必须使用新的currprice。我希望在mysqli中找到像
这样的东西 "UPDATE IF $EachRow[1]<>currprice SET prevprice=currprice,currprice='$EachRow[1]'"
基本上对于现有记录,如果当前价格已经改变,我希望在将currprice更新为新的$ EachRow [1]之前将先前的currprice记录为prevprice。
有没有办法让这种情况发生?我们可以在mysqli查询中创建IF语句吗?
答案 0 :(得分:0)
是的,您可以在IF
Duplicate Key Update
子句
INSERT INTO tbl (name, some_column, some_other)
VALUES (username, some_data)
ON DUPLICATE KEY UPDATE
some_other = IF(some_other > somevalue, "in_case_if_cond_is_true", "in_case_if_cond_is_false")
这些称为Flow Control Operators,MariaDB控制流Knowledge Base
根据Maria DB的说法
IF(expr1,expr2,expr3)
如果
expr1
为TRUE
(expr1 <> 0 and expr1 <> NULL)
,则IF()
会返回expr2
;否则返回expr3
答案 1 :(得分:0)
你可以使用正常的条件
UPDATE table_name SET `prevprice` = `currprice`, `currprice`='$EachRow[1]' WHERE `currprice` != '$EachRow[1]'
如果需要,可以使用引号(')和变量