我有两个表:
- 产品详细信息-用于存储产品信息
- 产品列表-针对不同用户可能销售的多个副本
我使用这个选择查询来收集listings table = (SELECT product_name, MIN(price) FROM product_listings GROUP BY product_name)
上同名产品的最低价格$product&$min_price是我分别用于这两个字段的变量。
这样做效果很好,是使用相同product_name的所有产品中价格最低的。
product_name | Lowest price
Title | £0.69
Title | £7.98
现在,我想用这些数据更新产品详细信息表(特别是"lowest_price"列),以便每个动态渲染的产品都显示可用的最便宜副本的价格。
到目前为止,我只用这个update query = ("UPDATE product_details SET lowest_price='$min_price' WHERE product_name='$product'");
更新了一条记录
是否可以使用这样的更新查询来更新所有记录?为什么它只更新一条记录?
假设您的product_listings表中有一个product_id,它与product_details表中的id字段相关,则可以执行以下操作:
update products p
inner join (
select product_id, min(price) min_price
from product_listing
group by product_id
) pl
on p.id = pl.product_id
SET p.min_price = pl.min_price
如果不是这样,而且你只有产品名称可以加入(这不是一个好主意),那就是:
update products p
inner join (
select product_name, min(price) min_price
from product_listing
group by product_name
) pl
on p.product_name = pl.product_name
SET p.min_price = pl.min_price
小提琴示例:http://sqlfiddle.com/#!9/9b928/1