[英]Invoicing and Billing System in PHP
我已經制作了一個腳本來創建訂單和創建發票。 這是兩個mysql表tbl_order和tbl_invoice。
tbl_invoice:
`id`, `customer_id`, `status`, `invoicedate`, `total`, `payment_method`, `duedate`, `paiddate`, `details`, `order_id`
tbl_order
`id`, `customer_id`, `status`, `orderdate`, `invoice_id`, `total`, `reseller`, `nextdue`
因此,基本上,在客戶單擊付款后下訂單時,它將在tbl_invoice中生成發票並將訂單詳細信息添加到tbl_order。
但是,在tbl_invoice中,它們是一個稱為“ order_id”的字段,在tbl_order中,它們是一個稱為“ invoice_id”的字段。
當客戶單擊“繼續付款”時(因為它同時生成發票和訂單),我使用以下腳本來更新兩個表:
$invoice = mysql_query("INSERT INTO `tbl_invoice` (customer_id, status, invoicedate, payment_method, total, duedate) VALUES ('$client', '$status', '$date', '$method', '$total', '$duedate')") or die("Failed to connect invoice query " .mysql_error());
$order = mysql_query("INSERT INTO `tbl_order` (customer_id, status, total, orderdate) VALUES ('$client', '$status', '$total', '$date')") or die("Failed to connect order query " .mysql_error());
$invoice_query =mysql_query("SELECT * FROM `tbl_invoice` ORDER BY `id` DESC LIMIT 1" .mysql_error());
$invoice_result = mysql_fetch_assoc($invoice_query);
$invoice_id = $invoice_result['id'];
$order_query =mysql_query("SELECT * FROM `tbl_order` ORDER BY `id` DESC LIMIT 1" .mysql_error());
$order_result = mysql_fetch_assoc($order_query);
$order_id = $order_result['id'];
$invoice = mysql_query("UPDATE `tbl_invoice` SET `order_id` = '$order_id' ORDER BY `id` DESC LIMIT 1") or die("Failed to connect invoice query 1" .mysql_error());
$order = mysql_query("UPDATE `tbl_order` SET `invoice_id` = '$invoice_id' ORDER BY `id` DESC LIMIT 1") or die("Failed to connect order query 1 " .mysql_error());
它是這樣工作的:
使用$ invoice_query我將最后一行(通過使用ORDER BY id
DESC LIMIT 1)添加到發票表中,然后使用這樣生成的訂單ID更新“ order_id”。
使用$ order_query我將最后一行添加到訂單表中,然后使用這樣生成的發票ID更新“ invoice_id”。
現在,如果特定的第二個客戶創建訂單和發票,就會出現問題,這將導致錯誤的數據進入錯誤的字段。
誰能建議我一種更新這些表的更好方法?
這里的循環關系-發票是指訂單,而訂單是指發票。 在關系數據庫設計中,這是非常糟糕的反模式。 而且,僅當通過外鍵放棄關系實施時才可以實現(在您的情況下) 。 因此,您可能最終會導致數據不一致。 在與客戶(和公司)的錢有關的領域,這有多好?
畢竟,您是否曾經問過自己,為什么您可能需要這種周期性關系?
我可以猜測即時答案是“我不知道”,然后是“我實際上不需要它!”。 :-)
所以建議是-重建數據庫,使關系成為單向
例如,發票與訂單綁定-似乎更合乎邏輯,因為存在一定時間段,但尚未下達訂單,但基本上沒有關系,因為這里有1:1
然后通過在發票表中的order_id中使用外鍵來實施它。
或者-再一次,只要您在此處具有1:1關系-將發票和訂單合並到一個表中並立即創建記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.