我使用MySQL来存储产品信息,其中单位的价格和数量可能会发生变化,所以我需要以某种方式实现历史记录。考虑一下我创建了一个表产品:ID,名称和表product_state:ID,价格,单位,product_id。我用最高ID识别最新的product_state。
如何创建数据库查询,以便让每个产品都处于当前状态?
我可以使用此查询获取单个产品:
SELECT * FROM product, product_state
WHERE product.id=%i AND product_state.product_id=product.id
ORDER BY product_state.id DESC LIMIT 1;
但是我需要在当前状态下获得一组所有产品,我不知道如何进行查询:
SELECT * FROM product, product_state
WHERE product.id = product_state.product_id
ORDER BY product_state.id DESC;
这也将返回我现在不想要的旧产品状态。
是否可以创建此类查询或是否有更好的方法来实现历史记录?
例如:
产品(id,name):1,狗 product_state(id,price,units,product_id):1,100,23,1 product_state(id,price,units,product_id):2,134,12,1
查询后的结果应为:1,dog,2,134,12,1
答案 0 :(得分:0)
SELECT * FROM product
JOIN product_state ps on product.id = ps.product_id
WHERE ps.id = (select max(ps2.id)
from product_state ps2
where ps2.product_id = ps.product_id)
ORDER BY ps.id DESC;