PHP Mysql字段值基于另一个字段值

时间:2016-05-24 12:32:10

标签: php mysql mysqli

不知道怎么问这个,但我有一个产品数据库及其价格。价格包括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语句吗?

2 个答案:

答案 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)
  

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

答案 1 :(得分:0)

你可以使用正常的条件

UPDATE table_name SET `prevprice` = `currprice`, `currprice`='$EachRow[1]' WHERE `currprice` != '$EachRow[1]'

如果需要,可以使用引号(')和变量