MySQL更新查询,其中condition仅更新一条记录

时间:2015-03-30 03:12:27

标签: php mysql sql-update where-clause min

我有两张桌子:

  1. 产品详情 - 用于存储产品信息。
  2. 产品列表 - 适用于不同用户可能销售的多份副本。
  3. 我使用此选择查询来收集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'");

    更新一条记录

    是否可以使用这样的更新查询更新所有记录?为什么只更新一条记录?

1 个答案:

答案 0 :(得分:2)

假设您的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