我在数据库中有一个下表
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 |
答案 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的必要技巧,否则会有一个错误,你正在修改你正在阅读的同一个表。
一般解释:
3
)UPDATE
)更新满足b IN (3)
条件的所有行答案 2 :(得分:0)
您可以在选择行的最大值之前进行查询,因此它将为3.然后只需更新值为3的行,将它们置为YES。