Php Mysql从两个表中获取min、avg和latest(产品和产品价格)
我有两个Mysql表: 具有id、名称、链接的产品 带id、id\U产品、价格、可用性和日期的产品价格 在第二个例子中,您可以看到,根据更新时间的不同,同一产品可以有更多的价格,我想做的是有一个查询来显示最低价格、平均价格和最新价格。我可以在一个查询中得到前两个最低和平均价格,在另一个查询中得到最新价格,但我不知道如何连接它们,或者是否有其他方法 我的第一个查询如下所示:Php Mysql从两个表中获取min、avg和latest(产品和产品价格),php,mysql,mysqli,Php,Mysql,Mysqli,我有两个Mysql表: 具有id、名称、链接的产品 带id、id\U产品、价格、可用性和日期的产品价格 在第二个例子中,您可以看到,根据更新时间的不同,同一产品可以有更多的价格,我想做的是有一个查询来显示最低价格、平均价格和最新价格。我可以在一个查询中得到前两个最低和平均价格,在另一个查询中得到最新价格,但我不知道如何连接它们,或者是否有其他方法 我的第一个查询如下所示: SELECT `products`.id AS ids, `products`.name, `products`.
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/->视频卡和视频卡的价格,因此即使我从价格中削减,我仍然在类别名称中保留它。我会尽力做点什么,谢谢你的警告。