Mysql 我怎样才能把我的桌子修好让药过期?

Mysql 我怎样才能把我的桌子修好让药过期?,mysql,Mysql,我在做一个药店的库存系统。现在我正试着做药物的过期测试。我想让你看看我的桌子。也许你知道如何修理我的桌子。我把有效期写在收到的订单上。当我收到药物时,它将插入tbl_药物中。如果客户购买了50片扑热息痛,或者供应商id等于3,该怎么办。两个月后,收到的药物将过期。我使用DATENOW>tbl_received_order.expiration_date获取所有过期药品。 我的问题是,药品过期时,数量与回收数量不符。例如,我的初始库存中有100件。但后来,50台被售出。为什么是100件。我还在考虑

我在做一个药店的库存系统。现在我正试着做药物的过期测试。我想让你看看我的桌子。也许你知道如何修理我的桌子。我把有效期写在收到的订单上。当我收到药物时,它将插入tbl_药物中。如果客户购买了50片扑热息痛,或者供应商id等于3,该怎么办。两个月后,收到的药物将过期。我使用DATENOW>tbl_received_order.expiration_date获取所有过期药品。 我的问题是,药品过期时,数量与回收数量不符。例如,我的初始库存中有100件。但后来,50台被售出。为什么是100件。我还在考虑过期药品的库存,而不是50件。我怎样才能修理我的桌子?有人能帮我解决我的问题吗

这是我的桌子

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