-1

我正在使用 MySQL 来存储价格和单位数量可能会发生变化的产品信息,因此我需要以某种方式实现历史记录。考虑一下,我创建了一个表产品:ID、名称和表产品状态:ID、价格、单位、产品 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;

这也将返回我现在不想要的旧产品状态。

是否可以创建这样的查询或者是否有更好的方法来实现历史?

例如:

product(id,name): 1, dog 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

4

1 回答 1

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;
于 2013-05-20T14:27:59.297 回答