我正在做一个药店的库存系统。现在,我正在尝试使药物失效。我想给你看我的桌子。也许您对如何修理我的桌子有个想法。我将到期日期放在tbl_received_order中。当我收到药物后,它将插入tbl_medicine。如果客户购买了50片扑热息痛或Supplier_med_id等于3,该怎么办?两个月后收到的药物将过期。我使用<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
<button type="button">Add</button>
<ul id="AddedWifiList"></ul>
获取所有过期的药物。
我的问题是,药物过期后,DATE(NOW()) > tbl_received_order.expiration_date
与qty
的计数不一致。仅举下面的例子,我有100个。在我最初的库存上。但是后来有50个。已经售出。为什么是100件。我的库存药品仍在反映我要过期的药品,而不是50件。我该如何修理我的桌子?有人可以帮我解决我的问题吗?
这是我的桌子
rec_qty
tbl_medicine
med_id supplier_med_id qty status branch_id
1 3 50 Active 1
2 7 100 Active 1
3 9 100 Active 1
tbl_received_order
received_id user_id purchase_order_id date_received
RO20190001 1 PO20190001 2019-05-04
tbl_received_order_details
id received_id supplier_med_id rec_qty expiration_date
1 RO20190001 3 100 2019-11-04
2 RO20190001 7 100 2019-11-04
3 RO20190001 9 100 2019-11-04
1 RO20190002 3 50 2019-11-04
2 RO20190002 7 50 2019-11-04
3 RO20190002 9 50 2019-11-04
tbl_transaction
transaction_id customer_id user_id transaction_date branch_id
0001 CU2018001 1 2019-09-04 1
0002 CU2018001 1 2019-09-04 1
0003 CU2018001 1 2019-09-04 1
答案 0 :(得分:1)
您可以使用JOIN
获得准确的数量。
SELECT orderd.expiration_date, orderd.rec_qty - SUM(trans.qty) AS inventory_left
FROM tbl_received_order_details AS orderd
JOIN tbl_transaction_details AS trans
ON orderd.supplier_med_id = trans.supplier_med_id
WHERE orderd.supplier_med_id = 3
AND orderd.expiration_date < '2019-11-05'
使用tbl_received_order_details
加入tbl_transaction_details
和supplier_med_id
。
过滤药物编号为“ 3”和有效期的记录。
由于某种药品的交易量可能超过1,因此我们需要SUM
出售数量并将其从总数量中减去以得到剩余数量。
更新1
以上查询将获得所售药品的过期药品。要获取所有已售出库存的剩余数量,请使用GROUP BY
。
SELECT orderd.expiration_date, orderd.rec_qty - SUM(trans.qty) AS inventory_left
FROM tbl_received_order_details AS orderd
JOIN tbl_transaction_details AS trans
ON orderd.supplier_med_id = trans.supplier_med_id
WHERE orderd.expiration_date < '2019-11-05'
GROUP BY orderd.supplier_med_id
更新2
要获取所有剩余的剩余库存(无论是否已售出),请使用LEFT JOIN
。 COALESCE(trans.qty, 0)
将返回第一个NOT NULL
值。因此,如果药品从不出售,则交易表中将没有任何条目,该条目将把数量返回为NULL。在这种情况下,我们将从rec_qty
中减去零,这反过来将得到完整的rec_qty。
SELECT orderd.expiration_date, orderd.rec_qty - SUM(COALESCE(trans.qty, 0)) AS inventory_left
FROM tbl_received_order_details AS orderd
LEFT JOIN tbl_transaction_details AS trans
ON orderd.supplier_med_id = trans.supplier_med_id
WHERE orderd.expiration_date < '2019-11-05'
GROUP BY orderd.supplier_med_id