Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySql,在重复更新时插入,其中_Php_Mysql_Database_Insert_Sql Update - Fatal编程技术网

Php MySql,在重复更新时插入,其中

Php MySql,在重复更新时插入,其中,php,mysql,database,insert,sql-update,Php,Mysql,Database,Insert,Sql Update,我有一个表(price\u flow),它有3列。我用来记录产品的价格流: row_id (int, primary, ai) | product_id (int) | price (int) | update_date (date) 1 | 1234 | 302 | 2016-07-22 2 | 923 | 153 |

我有一个表(price\u flow),它有3列。我用来记录产品的价格流:

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).";"
$query=“插入价格流(型号id、更新日期、价格)

从price\u flow中选择$aid、$date、$pmin,其中model\u id=$aid和price您有两个
WHERE
子句,这是一个明显的语法错误。如果您需要有条件地更新dupe键上的
中的一个字段,请执行以下操作:

... UPDATE price=IF(price < 2*$pmin, 291, price)
…更新价格=IF(价格<2*$pmin,291,价格)

您有两个
where
子句,这是一个明显的语法错误。如果您需要有条件地更新重复键上的
中的一个字段,请按以下方式执行:

... UPDATE price=IF(price < 2*$pmin, 291, price)
…更新价格=IF(价格<2*$pmin,291,价格)

非常感谢,这解决了我的第一个问题,第二个问题有解决方案吗?不知道。可能不应该尝试混合这两种类型的查询。mysql无法为这样的选择创建无中生有的行。虽然你可以尝试联合,但无论主选择的结果如何,它都会运行。非常感谢,这解决了我的第一个问题问题,第二个问题有什么解决方案吗?不知道。可能不应该尝试混合这两种类型的查询。mysql无法为这样的选择创建无中生有的行。虽然可以尝试联合,但无论主选择的结果如何,它都会一直运行。警告:此代码可能有一些严重错误。请尽可能使用prepared语句。在任何用户提供的数据被指定为
:name
指示符的情况下,这些语句都非常简单,稍后将使用
绑定参数或
执行参数来填充指示符,具体取决于您使用的是哪一个。警告:此代码可能有许多严重错误。尽可能使用prepared语句。在任何用户提供的数据都指定了
:name
指示符的情况下,这些语句都非常简单,稍后将使用
bind\u param
execute
来填充指示符,具体取决于您使用的是哪一个。