我有什么:
- 我有一个包含各种产品的文件(Flag" P"表示保留,没有" P"表示已售出但未保留)
元素
PRODOTTO Quantita Terminale
TAMOXIFENE EG*20CPR RIV 20MG 00002n 04
FERRITIN COMPLEX*OS 10FL 8ML 00001 P 01
VOLTADOL*10CER MEDIC 140MG 00001n 05
LEDERFOLIN*10CPR 7,5MG 00002 P 03
- 通过这个文件,通过常规的php表达式(只搜索带有" P"标志的字符串),我提取产品并将其插入到mysql db中。
insericineldb.php
$txt = file_get_contents('./FILE', true);
$specialChars = preg_quote( '#$%^&*()+=-[]\';,./{}|\":<>?~', '#' );
preg_match_all('#([0-9]{4,9}\s+[A-Z]{1}\s+([' . $specialChars . 'A-Z0-9 ]+)\s+([0-9]{3,7})n?\s+P\s+([0-9]+))#', $txt, $match);
$products = [];
foreach (array_keys($match[2]) as $idx) {
$tagliaprodotto = rtrim(substr($match[2][$idx],1));
$tagliaquantita = ltrim($match[3][$idx],'0');
$products[] = [
'prodotto' => $tagliaprodotto,
'quantita' => $tagliaquantita,
'terminale' => $match[4][$idx]
];
}
$query = $pdo->prepare('INSERT INTO tabella (prodotto, quantita, terminale, data) VALUES (:prodotto, :quantita, :terminale, NOW()) ON DUPLICATE KEY UPDATE quantita = VALUES(quantita), terminale = VALUES(terminale)');
foreach ($products as $product) {
$query->execute($product);
}
- 由于使用批次(监控文件的变化),我自动提取产品。
BATCH
@echo off
:loop
timeout -t 1 >nul
for %%i in (c:\file) do echo %%~ai|find "a">nul || goto :loop
"c:\xampp\php\php.exe" -f c:\xampp\htdocs\inseriscineldb.php
rem do workload
attrib -a c:\file
goto :loop
文件:
- 在某个时间非常规(当他们作出最终订单时,每天2次)被清空并不完全(某些字符串有和没有&#34; P&#34; 保留在该文件但它们并不重要,仅对逻辑很重要,因为我不能使用if作为:当P = 0时,不要启动查询。)
- 有时候某些产品(ES。铁氧体复合物* OS 10FL 8ML 00001 P 01)被淘汰自愿(假设客户需要50毫升产品,我保留但是在他想要之后8毫升产品,旧的50毫升订单不会从数据库中删除)
问题:
1)因此,当我在自愿中删除其中一个元素时,通过INSERT INTO将数据输入数据库时,不会将其从数据库中删除。
2)但是,如果我使用REPLACE而不是INSERT,当文件被清空时,数据库中的其他元素也将被删除,现在我被卡住了。
答案 0 :(得分:0)
以一种非常简单的方式实现此目的的方法是从数据库中读取所有元素(使用&#34; select * from tabella)然后检查哪一个存在于文件并删除/插入/更新您需要的内容。