-1

MySQL を使用して、価格とユニット数が変更される可能性のある製品情報を保存しているため、何らかの形で履歴を実装する必要があります。それについて考えて、テーブル product: ID, name とテーブル product_state: ID, price, units, 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、名前): 1、犬の製品状態 (ID、価格、単位、製品 ID): 1、100、23、1 製品状態 (ID、価格、単位、製品 ID): 2、134、12、1

クエリ後の結果は次のようになります: 1, 犬, 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 に答える