我该如何修理我的桌子使药物失效?

时间:2019-09-08 08:35:45

标签: mysql

我正在做一个药店的库存系统。现在,我正在尝试使药物失效。我想给你看我的桌子。也许您对如何修理我的桌子有个想法。我将到期日期放在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_dateqty的计数不一致。仅举下面的例子,我有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

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_detailssupplier_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 JOINCOALESCE(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