如何在更新表中只更改2行

时间:2015-05-28 05:39:14

标签: mysql mysqli sql-update

我有产品图片表。我的桌子上有每张产品图片的主图片列,同时只有一张图片应该是主图片而另一张图片不是。

我写这个mysql查询:

update product_picture a1,product_picture a2 
set a1.mainpicture=0, a2.mainpicture=1 
where (a1.id=16 and productid=2) 
and (a2.id!=16 and productid=2)

如果我的产品有两张图片则没有问题,但如果此查询执行一张图片主图片等于零而其他主图片更改为一张,则产品有三张或更多图片。

我希望选中的行为零,如果有两个或多个图片,则将一个随机行设置为1.

我不能对此查询使用限制。

我解决了这个问题并把它放在这里也许这对其他人有好处

回答:

update product_picture a1,product_picture a2 
set a1.mainpicture=0,a2.mainpicture=1 
where (a1.id=16 and a1.productid=2) 
      and (a2.id =(SELECT * FROM ( SELECT id 
                    FROM `product_picture` 
                   WHERE `id` != 16 
                   AND `productid`=2 
                   ORDER BY RAND() LIMIT 1 ) cl1))

1 个答案:

答案 0 :(得分:0)

您可以使用IF()更新特定产品ID的每张图片:

UPDATE product_picture
SET mainpicture = IF(id = 16, 1, 0)
WHERE productid = 2

这将设置id为16的图片作为产品2的主图片。