对于定制的电子商务平台中的产品,我具有以下数据结构(仍在开发中,请仁慈: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


其背后的原因是获取最新的两个价格历史记录条目以进行相互比较。如果第二个价格低于第一个价格,则该产品的价格会下降。

这是我为您设置的SQL Fiddle。我的目标是MySQL 5.5(这是我的VM中具有的数据库引擎)。

但这并不能按照我想要的方式工作,而且我确定我缺少了一些东西。我选择this问题作为构建查询的基础。我想添加到该查询中的另一件事是能够获取具有给定阈值(ala DATEDIFF(...) <= 15)的价格下降的产品列表,但是我想这是添加DATEDIFF(p1.date_added, NOW()) BETWEEN ? AND ?之类的问题。

任何提示将不胜感激:)

最佳答案

尝试这个:

SELECT
p1.product_id
FROM commerce_products_price p1
LEFT JOIN commerce_products_price p2 ON (p1.product_id = p2.product_id)
LEFT JOIN (
    Select p3.product_id, max(date_added) as maxD,min(date_added) as minD
    from commerce_products_price p3
    group by p3.product_id
) p4 ON (p1.product_id = p4.product_id)
WHERE p2.price < p1.price
AND p2.date_added = p4.maxD AND p1.date_added = p4.minD

关于php - MySQL-获得价格下降的产品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35085813/

10-11 14:36
查看更多