我在mySQL数据库上使用PHP脚本。我所拥有的是为搜索页面提取的产品清单。我的工作正常,我的搜索页面运行完美。我唯一想知道的是如何更新数据库中每个产品的库存。我有一个新文件需要与产品编号匹配,然后替换mysql数据库的一列中的数据。很像下面这个
mysql数据库:
ProductNumber .................. ProductStock
12345678 .................................... 1
新文件:
12345678 .................. 5
基本上我需要新文件与mysql上的产品编号匹配,并用新编号替换产品库存。所有这些都在PHP中。
答案 0 :(得分:2)
您没有说明您在该数据库中获得了多少行。通常单个UPDATE非常慢。
你可以
这将快几个数量级。
使用在mysql上使用的语法进行更新:
UPDATE products p JOIN temp_products t ON (p.id=t.id) SET p.stock = t.stock;
请注意,您需要LOAD DATA INFILE的特殊权限。 您还可以使用LOAD DATA INFILE LOCAL(检查文档)。
或者,您可以使用PHP解析文件,在临时表中生成具有多值的INSERT,并执行联接更新。这将比LOAD DATA INFILE慢一点,但比执行27000次查询要快得多。
答案 1 :(得分:1)
$sql = 'UPDATE table_products SET ProductStock=5 WHERE ProductNumber=12345678';
mysql_query($sql);
基本上:对数据库使用UPDATE语句。
文件如何显示?
答案 2 :(得分:0)
您必须打开文件,使用explode()
,然后根据要求使用preg_match
。
答案 3 :(得分:0)
您可以使用mysql的加载数据本地infile来执行此操作。写一个小的导入脚本,每天在cron上运行它。库存文件是csv格式吗?
示例脚本如下
$dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
$stock_file = $dir . "files". DIRECTORY_SEPARATOR."stock.csv";
$stock_query = "
load data local infile \"{$stock_file}\"
replace into table products
fields terminated by ',' enclosed by '\"'
lines terminated by '\n'
ignore 1 lines
(ProductNumber,ProductStock);
";
$m->query($stock_query);
要考虑的事项是字段被终止和封闭的内容。如果文件有一行,忽略1行也会忽略标题行。