私はカスタムメイドの電子商取引プラットフォームの製品に対して次のデータ構造を持っています (まだ開発中なので、親切にしてください:P)。
これは、製品の価格表の現在の定義です (特定の製品ごとの価格の変化に関するタイムリーなレポートを作成するために、別の方法でモデル化することにしました)
CREATE TABLE IF NOT EXISTS commerce_products_price (
price_id INT(11) NOT NULL AUTO_INCREMENT,
product_id INT(11) NOT NULL,
price FLOAT NOT NULL,
price_offer FLOAT,
date_added DATETIME NOT NULL
PRIMARY KEY (price_id)
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
価格が下がっている製品のリストを (ID ごとに) 取得したいと考えています。現在、シミュレートした SQL クエリは次のようになります。
SELECT
DISTINCT(p1.product_id) AS product_id
FROM commerce_products_price p1
INNER JOIN commerce_products_price p2 ON (p1.product_id = p2.product_id) AND (p2.date_added > p1.date_added)
WHERE p2.price < p1.price
この背後にある理由は、最新の 2 つの価格履歴エントリを取得して相互に比較することです。2 番目の価格が最初の価格よりも低い場合、その製品の価格は下がります。
ここに、私が設定したSQL Fiddleがあります。私は MySQL 5.5 (私の VM にあるデータベース エンジン) をターゲットにしました。
しかし、それは私が望むようには機能しておらず、何かが欠けていると確信しています。クエリを作成するためのベースとして、この質問を選択しました。このクエリに追加したいもう 1 つのことは、特定のしきい値 (ala DATEDIFF(...) <= 15
) で価格が下がった製品のリストを取得する機能ですが、それは のようなものを追加することの問題だと思いDATEDIFF(p1.date_added, NOW()) BETWEEN ? AND ?
ます。
どんなヒントでも大歓迎です:)