更新行(来自 select 的结果)mysql

Update rows by (results from select) mysql

有没有人可以帮助我根据 select 的结果更新所有行?:

UPDATE newser 
SET total_rating = total_rating + (((RESULTS FROM SELECT))) 
WHERE bdate >= NOW() - INTERVAL 12 HOUR 
  AND usertext = 'maxer12'

(((SELECT))):

SELECT DATE_FORMAT(`bdate`, '%i') FROM newser

我想更新一些存在于 total_rating 列中的数字,方法是向它们添加来自 (((RESULTS FROM SELECT))

的结果

所以它应该是这样的:

UPDATE newser 
SET total_rating = total_rating + (SELECT DATE_FORMAT(`bdate`, '%i') FROM newser) 
WHERE bdate >= NOW() - INTERVAL 12 HOUR 
  AND usertext = 'maxer12'

这是实现此目标的正确方法吗?

非常感谢任何帮助。

TABLE 更新前:

| id | date| total_result | username |
| 1  |   4 |       3      | maxer12  |
| 2  |   4 |       6      | maxer12  |
| 3  |   5 |       5      | maxer12  |
| 4  |   5 |       4      | maxer12  |
| 5  |  33 |       3      | maxer12  |

TABLE 更新后:(date+total_result ) 在同一个 table:

| id | date| total_result | username |
| 1  |   4 |       7      | maxer12  |
| 2  |   4 |       10     | maxer12  |
| 3  |   5 |       10     | maxer12  |
| 4  |   5 |       9      | maxer12  |
| 5  |  33 |       36     | maxer12  |

您可以使用 INNER JOIN。我认为 id 是唯一的,您可能有一些其他列来构成连接条件。请记住,在几乎所有情况下,连接都比子查询执行得更快。并且在使用 join 进行更新时不能使用限制。

UPDATE newser  n 
INNER JOIN
( 
   SELECT id, DATE_FORMAT(`bdate`, '%i') as total_rating1  
   FROM newser 
) as n1
on n.id=n1.id
SET n.total_rating = n.total_rating + n1.total_rating
WHERE  bdate >= NOW() - INTERVAL 12 HOUR AND usertext ='maxer12';