[英]PHP Code to Process Faster
我有一個正在運行的PHP程序,可以處理耗材庫存。
我希望此代碼在打開頁面時能更快地處理以更新耗材的余額。
物料包含物料清單及其余額。
交易包含接收,退貨和發行的交易。
下面的程序檢索表的SUPPLIES和TRANSACTIONS,並從所有TRANSACTIONS計算余額,這將更新SUPPLIES的MYSQL表。
<?php
//Update supplies balance starts here
$supplies = DB::getInstance()->query("SELECT * FROM supplies ORDER BY id DESC");
foreach($supplies->results() as $supply) {
$balance = 0;
$transactions = DB::getInstance()->query("SELECT * FROM transactions ORDER BY id ASC");
foreach($transactions->results() as $transaction) {
if($transaction->code === $supply->id){
if($transaction->transaction_type === "1"){
$balance = $balance + $transaction->quantity;
} else if($transaction->transaction_type === "2"){
$balance = $balance - $transaction->quantity;
} else if($transaction->transaction_type === "3"){
$balance = $balance + $transaction->quantity;
}
}
}
$supplied = new Supply();
$supplied->find($supply->id);
try {
$supplied->update(array(
'balance' => $balance,
));
} catch (Exception $e) {
die($e->getMessage());
}
}
//Update supplies balance ends here
?>
如前所述,@ Phylogenesis的更改應觸發耗材的更新。
BEGIN TRANSACTION;
UPDATE transactions SET quantity = ..., code = ..., ....;
UPDATE supplies SET balance = balance +/- ....;
COMMIT;
因此,您無需在每次打開頁面時都更新耗材,也不需要重新計算整個表。 在一次交易中做到這一點很重要。 理想情況下,應盡可能將其放在事務表功能“ TRIGGER ON UPDATE”中的數據庫中。
如果不能,請嘗試在數據庫端計算耗材的更新值,例如:
UPDATE supplies s
SET balance =
(SELECT SUM(quantity) FROM transactions t WHERE t.code = s.id AND transaction_type IN (1, 3)) -
(SELECT SUM(quantity) FROM transactions t WHERE t.code = s.id AND transaction_type = 2);
它仍然比PHP慢,但快得多。
編輯:我更新查詢示例以滿足問題。
我做了@Phylogenesis建議包含的更新$balance
,直接將其添加到基於'$ transactions'的$supplies
數據庫中。
為了避免客戶端更新$ supplies的所有$balance
的延遲,我使用cron作業根據所需的時間表運行腳本。
通過此鏈接中的以下步驟為Centos 7安裝了cronjob:
https://www.rosehosting.com/blog/automate-system-tasks-using-cron-on-centos-7/
要檢查是否安裝了cron,請鍵入以下內容: systemctl status crond.service
然后使用https://crontab.guru/
生成表達式以計划自動運行PHP腳本。
如果仍然對其工作方式感到困惑,請查看此鏈接以獲取示例:
https://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/
要安裝或創建或編輯自己的cron作業,請執行以下操作:
鍵入crontab -e
然后回車
按i
,然后開始輸入您的表情
輸入:wq!
然后按ENTER保存您的cron作業。
鍵入crontab -l
來檢查正在運行的cron作業。
而已! 希望這對別人有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.