我不是MySQL的专家,而且我遇到了一个我不知道如何解决的问题。
我有两张桌子。
Table `players`
id | name | high_score
---|------|-----------
1 | john | -
2 | mary | -
3 | mike | -
Table `scores`
id | id_player | score
---|-----------|------
1 | 1 | 12
2 | 1 | 5
3 | 3 | 8
4 | 2 | 7
5 | 2 | 25
6 | 3 | 18
这听起来很愚蠢,但我想根据第二张桌子上的最大值更新第一张桌子的高分记录。
我到达了这个不完整的解决方案:
UPDATE `productos_players` p INNER JOIN `scores` s ON (p.id = s.id_player) SET p.high_score=s.score
这是我到目前为止所做的,但我仍然需要修改scores
的查询以获得最大MAX()并将其限制为1个结果或类似的结果,但我不是&# 39;不知道怎么做,或者即使有可能。
感谢您的帮助!!
答案 0 :(得分:1)
您可以尝试使用以下UPDATE
来更新高分:
UPDATE `players` p
SET p.high_score = (
SELECT MAX(score)
FROM scores
WHERE id_player = p.id
);
另一种解决方案是使用VIEW
:
CREATE VIEW v_players AS
SELECT players.*, MAX(scores.score) AS 'high_score'
FROM players LEFT JOIN scores ON players.id = scores.id_player
GROUP BY players.id
使用VIEW
的好处是不会在每次更改scores
表后更新表。
如何使用TRIGGER
自动使用UPDATE
:
在UPDATE
的{{1}},TRIGGER
或UPDATE
之后INSERT
到UPDATE
表格上可以使用DELETE
查询表,自动:
scores