You can calculate the rankings when you make your query:
SELECT * FROM (
SELECT teams.*, @rownum := @rownum + 1 AS rank
FROM teams, (SELECT @rownum := 0) T1
ORDER BY score DESC) T2
WHERE id = 1
It works by initializing a variable called rownum to 0 and then iterating over the rows in order of decreasing score. For each team the rownum is increased and the team is assigned a rank based on the current value of rownum. The outer select applies a where clause so that only one row is returned.
Here is an improved version that assigns the same rank to teams that have tied scores:
SELECT id, name, teams.score, rank FROM (
SELECT score, @rownum := @rownum + 1 AS rank
FROM (SELECT DISTINCT(score) FROM teams) T1, (SELECT @rownum := 0) T2
ORDER BY score DESC) T3
JOIN teams ON T3.score = teams.score
If this isn't fast enough for you, then use a trigger instead.