不知道如何问这个,但是我有一个产品及其价格的数据库。该价格包括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]';";

问题是现有产品。我只想在其prevprice与currprice不同时更新其currprice,并且要更新它们,必须使用新的currprice。我希望在mysqli中找到类似的东西

"UPDATE IF $EachRow[1]<>currprice SET prevprice=currprice,currprice='$EachRow[1]'"

基本上对于现有记录,如果当前价格已更改,我希望将之前的价格记录为prevprice,然后再将currprice更新为新的$ EachRow [1]。

有没有办法做到这一点?我们可以在mysqli查询中制作IF语句吗?

最佳答案

是的,您可以在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)



  如果expr1TRUE (expr1 <> 0 and expr1 <> NULL),则IF()返回
  expr2;否则返回expr3

关于php - PHP Mysql字段值基于另一个字段值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37413677/

10-11 00:11