Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.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
Php Mysql从两个表中获取min、avg和latest(产品和产品价格)_Php_Mysql_Mysqli - Fatal编程技术网

Php Mysql从两个表中获取min、avg和latest(产品和产品价格)

Php Mysql从两个表中获取min、avg和latest(产品和产品价格),php,mysql,mysqli,Php,Mysql,Mysqli,我有两个Mysql表: 具有id、名称、链接的产品 带id、id\U产品、价格、可用性和日期的产品价格 在第二个例子中,您可以看到,根据更新时间的不同,同一产品可以有更多的价格,我想做的是有一个查询来显示最低价格、平均价格和最新价格。我可以在一个查询中得到前两个最低和平均价格,在另一个查询中得到最新价格,但我不知道如何连接它们,或者是否有其他方法 我的第一个查询如下所示: SELECT `products`.id AS ids, `products`.name, `products`.

我有两个Mysql表:

具有id、名称、链接的产品 带id、id\U产品、价格、可用性和日期的产品价格 在第二个例子中,您可以看到,根据更新时间的不同,同一产品可以有更多的价格,我想做的是有一个查询来显示最低价格、平均价格和最新价格。我可以在一个查询中得到前两个最低和平均价格,在另一个查询中得到最新价格,但我不知道如何连接它们,或者是否有其他方法

我的第一个查询如下所示:

SELECT 
    `products`.id AS ids, `products`.name, `products`.link, 
    `products-prices`.id AS id_p, `products-prices`.price, 
    `products-prices`.availability, `products-prices`.date, 
    AVG(`products-prices`.price) AS medie, 
    MIN(`products-prices`.price) AS minim 
FROM
    `products-prices` 
INNER JOIN 
    `products` ON `products`.id = `products-prices`.id_produs 
GROUP BY 
    ids 
ORDER BY 
    ids 
第二个是:

SELECT * 
FROM `products-prices`
WHERE date IN (SELECT DISTINCT MAX(date) max_date 
               FROM `products-prices` 
               GROUP BY id_produs) 
你能告诉我如何把它们结合起来吗?多谢各位

我不知道工会是如何运作的,如果它能运作,我会试试


//编辑:我还有另一个问题,我能在数据库中没有最新条目的情况下获得最小、平均值吗?

您可以使用子选择来获得最大日期

  select 
      `products`.id AS ids, 
      `products`.name, 
      `products`.link,
      t.date,
      t.price,
      t.availability,
       AVG(`products-prices`.price) AS medie, 
       MIN(`products-prices`.price) AS minim 

  from  `products`
  inner join `products-prices`  ON `products`.id=`products-prices`.id_produs 
  inner join ( )
  select id_produs, date, price, availability
  from `products-prices` 
  where ( id_produs, date ) = (
  select id_produs, max(date) as max_date
  from `products-prices` 
  group by id ) t on t.id_produs = `products`.id_prod

您可以使用“最大日期”的子选择

  select 
      `products`.id AS ids, 
      `products`.name, 
      `products`.link,
      t.date,
      t.price,
      t.availability,
       AVG(`products-prices`.price) AS medie, 
       MIN(`products-prices`.price) AS minim 

  from  `products`
  inner join `products-prices`  ON `products`.id=`products-prices`.id_produs 
  inner join ( )
  select id_produs, date, price, availability
  from `products-prices` 
  where ( id_produs, date ) = (
  select id_produs, max(date) as max_date
  from `products-prices` 
  group by id ) t on t.id_produs = `products`.id_prod

这是一个未经测试的解决方案,如果有帮助,请告诉我

SELECT 
    `products`.id AS ids, `products`.name, `products`.link, 
    `products-prices`.id AS id_p, `products-prices`.price, 
    `products-prices`.availability, `products-prices`.date, 
    AVG(`products-prices`.price) AS medie, 
    MIN(`products-prices`.price) AS minim,
    latest.`date` as latest_date,
    latest.price as latest_price 
FROM
    `products-prices` 
INNER JOIN 
    `products` ON `products`.id = `products-prices`.id_produs 
INNER JOIN
    (select id_produs, price, `date` 
     from `products-prices` t1
     where not exists (select 1
                       from `products-prices` t2
                       where t1.`date` < t2.`date` and t1.id_produs = t2.id_produs)
     group by id_produs
    ) latest     
ON
    latest.id_produs = products.id
GROUP BY 
    ids 
ORDER BY 
    ids 

这是一个未经测试的解决方案,如果有帮助,请告诉我

SELECT 
    `products`.id AS ids, `products`.name, `products`.link, 
    `products-prices`.id AS id_p, `products-prices`.price, 
    `products-prices`.availability, `products-prices`.date, 
    AVG(`products-prices`.price) AS medie, 
    MIN(`products-prices`.price) AS minim,
    latest.`date` as latest_date,
    latest.price as latest_price 
FROM
    `products-prices` 
INNER JOIN 
    `products` ON `products`.id = `products-prices`.id_produs 
INNER JOIN
    (select id_produs, price, `date` 
     from `products-prices` t1
     where not exists (select 1
                       from `products-prices` t2
                       where t1.`date` < t2.`date` and t1.id_produs = t2.id_produs)
     group by id_produs
    ) latest     
ON
    latest.id_produs = products.id
GROUP BY 
    ids 
ORDER BY 
    ids 

不要在表/列标识符中使用“-”。这肯定会造成严重后果。我正在根据类别名称自动生成数据库,如www.something.com/video-cards/->视频卡和视频卡的价格,因此即使我从价格中削减,我仍然在类别名称中保留它。谢谢您的警告,我将尝试做一些事情。不要在表/列标识符中使用“-”。这肯定会造成严重后果。我正在根据类别名称自动生成数据库,如www.something.com/video-cards/->视频卡和视频卡的价格,因此即使我从价格中削减,我仍然在类别名称中保留它。我会尽力做点什么,谢谢你的警告。