Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从每家商店的产品价格表中获取产品的最低价格_Mysql_Sql_Group By_Sql Order By_Min - Fatal编程技术网

Mysql 从每家商店的产品价格表中获取产品的最低价格

Mysql 从每家商店的产品价格表中获取产品的最低价格,mysql,sql,group-by,sql-order-by,min,Mysql,Sql,Group By,Sql Order By,Min,我正在制作一个网站来比较不同商店的产品价格。我已经创建了一个搜索功能,我想显示当前的最低价格,这是我有点卡住了 我有一个表Products,上面有基本信息,还有一个表product\u store,上面有不同商店针对不同产品的奖品。以下是这些表的数据库基本架构: +-----------+ +---------------+ | products | | product_store | +-----------+ +---------------+ | id |

我正在制作一个网站来比较不同商店的产品价格。我已经创建了一个搜索功能,我想显示当前的最低价格,这是我有点卡住了

我有一个表
Products
,上面有基本信息,还有一个表
product\u store
,上面有不同商店针对不同产品的奖品。以下是这些表的数据库基本架构:

+-----------+   +---------------+
| products  |   | product_store |
+-----------+   +---------------+
| id        |   | product_id    |
| name      |   | store_id      |
+-----------+   | price         |
                | created_at    |
                +---------------+
product\u-store
表具有相同的
product\u-id
store\u-id
的多个价格,因此我可以创建价格历史记录

现在我想创建一个查询,以获取所有产品及其当前的最低价格。因此,您要为每个在创建的最高
商店定价,我想从这个集合中获得最低值

这就是我迄今为止所尝试的:

select products.*, prices.price 
from products
left join (
    SELECT p1.product_id, min(p1.price) as price, p1.created_at 
    FROM product_store p1 
    WHERE p1.created_at = (SELECT max(created_at) FROM product_store p2 WHERE p2.store_id = p1.store_id
) as prices
on prices.product_id = products.id
我搜索每个商店和产品在
创建的最高的
,并获得这些行的最低价格。然而,这给出了一些非常奇怪的结果,即价格在产品之间混淆,而一些有价格的产品在结果中没有任何影响

有人能帮我为这个问题创建一个好的查询吗


提前感谢。:)

这里有一种方法。它聚合
产品存储
表,以获取每个存储的最大创建日期。然后将其连接回该表以获取
价格
,最后在外部查询中进行聚合:

select p.*, min(ps.price)
from products p left join
     (select ps.product_id, ps.store_id, max(created_at) as maxca
      from product_store ps
      group by ps.product_id, ps.store_id
     ) pssum
     on pssum.product_id = p.id left join
     product_store ps
     on ps.product_id = pssum.product_id and
        ps.store_id = pssum.store_id and
        ps.created_at = pssum.maxca
group by p.id;

您的
product\u store
表就是一个缓慢变化的维度示例。如果使用
eff_date
end_date
(生效日期和结束日期)列进行设置,那么查询将更容易编写,而且可能在性能方面更高效。

您想要的是每种产品的最低价格还是价格最低的商店?如果多家商店的价格最低,你想要其中一家还是全部?我也想知道商店的名称。但我只想展示一家商店。这很有效,谢谢。我将考虑使用<<代码> EffyDeX<代码>和<代码> EnthDeals<代码>,谢谢。