更新数据库,其中有超过1个最大值

时间:2015-01-21 03:00:47

标签: php mysql

我在数据库中有一个下表

B  | name
---|------
 3 | 
 3 | 
 1 | 

使用此代码

$sql = "UPDATE products SET name='YES' WHERE B>0 ORDER BY B DESC LIMIT 1";

结果就是这个

B  | name
---|------
 3 | YES
 3 | 
 1 | 

但是有超过1个最高值,我想在名称上放置YES,其中B具有最高值。结果应该是这样的。

B  | name
---|------
 3 | YES
 3 | YES
 1 | 

3 个答案:

答案 0 :(得分:1)

UPDATE products
   SET name = 'YES'
 WHERE B = (SELECT MAX(B) FROM products WHERE B > 0)

答案 1 :(得分:1)

UPDATE products SET name = 'YES'
WHERE b IN (SELECT b FROM (SELECT MAX(B) b FROM products WHERE b > 0) x)

请注意,有2个嵌套查询。

这是一个愚弄mysql的必要技巧,否则会有一个错误,你正在修改你正在阅读的同一个表。

一般解释:

  1. 嵌套查询选择给定列的最大值(在本例中为3
  2. 外部查询(UPDATE)更新满足b IN (3)条件的所有行

答案 2 :(得分:0)

您可以在选择行的最大值之前进行查询,因此它将为3.然后只需更新值为3的行,将它们置为YES。