Mysql 我怎样才能把我的桌子修好让药过期?
我在做一个药店的库存系统。现在我正试着做药物的过期测试。我想让你看看我的桌子。也许你知道如何修理我的桌子。我把有效期写在收到的订单上。当我收到药物时,它将插入tbl_药物中。如果客户购买了50片扑热息痛,或者供应商id等于3,该怎么办。两个月后,收到的药物将过期。我使用DATENOW>tbl_received_order.expiration_date获取所有过期药品。 我的问题是,药品过期时,数量与回收数量不符。例如,我的初始库存中有100件。但后来,50台被售出。为什么是100件。我还在考虑过期药品的库存,而不是50件。我怎样才能修理我的桌子?有人能帮我解决我的问题吗 这是我的桌子Mysql 我怎样才能把我的桌子修好让药过期?,mysql,Mysql,我在做一个药店的库存系统。现在我正试着做药物的过期测试。我想让你看看我的桌子。也许你知道如何修理我的桌子。我把有效期写在收到的订单上。当我收到药物时,它将插入tbl_药物中。如果客户购买了50片扑热息痛,或者供应商id等于3,该怎么办。两个月后,收到的药物将过期。我使用DATENOW>tbl_received_order.expiration_date获取所有过期药品。 我的问题是,药品过期时,数量与回收数量不符。例如,我的初始库存中有100件。但后来,50台被售出。为什么是100件。我还在考虑
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
通过使用联接可以获得准确的数量 更新2 要获取所有过期的剩余库存(无论是否出售),请使用left JOIN。COALESCEtrans.qty,0将返回第一个非空值。所以,若药品从未售出,它将不会在交易表中有任何条目返回空数量。在这种情况下,我们将从回收数量中减去零,这反过来将得到剩余的完整回收数量
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
您是否将客户购买的数量存储在tbl_medicine和tbl_transaction_details中?@Samir no仅存储在tbl_transaction_details中…检查我的答案。它应该能得到你所需要的。@Samir但是如果除了供应商id 3之外,还有10件供应商id 7`也被出售了呢?如何在一个显示器中反映这两个事务?您可以在WHERE子句中使用static,您可以使用GROUP BY执行此操作。检查我的最新答案。这就是我想要的!很高兴你来了,不客气!您也可以向上投票:添加了一个查询,它将帮助您获得所有剩余数量,无论它们是否已售出。所以,如果供应商id 9从未售出,您仍然希望他们的号码过期。
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
tbl_transaction_details
details_id transaction_id supplier_med_id qty price total_price
1 0001 3 50 10.00 500
2 0002 3 10 10.00 100
3 0003 3 10 10.00 100
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'
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
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