我的 MySQL 数据库中有两个表。一个表称为玩家,另一个表称为世界。每个玩家都有一个“等级”和一个“世界”栏。我想要实现的是根据表玩家中的列值填充表world中的列。我想首先获得该世界上玩家的总数以及他们的平均等级。
我的表格如下所示:
表:玩家
+-------+-------+--------+----------+-------+--------------+---------+--------+
| id | name | sex | vocation | level | achievements | world | online |
+-------+-------+--------+----------+-------+--------------+---------+--------+
| 24471 | John | Male | None | 92 | 3 | Antica | 1 |
| 24493 | Bob | Male | None | 76 | 19 | Amera | 0 |
| 24535 | Sam | Male | None | 75 | 0 | Antica | 0 |
| 24574 | Sarah | Female | None | 78 | 23 | Beneva | 1 |
| 24673 | Carl | Male | None | 75 | 10 | Belobra | 1 |
+-------+-------+--------+----------+-------+--------------+---------+--------+
表:世界
+----+---------+---------+--------+--------+----------+---------------+--------------+
| id | name | players | online | avglvl | totalexp | location | pvp |
+----+---------+---------+--------+--------+----------+---------------+--------------+
| 1 | Amera | 0 | 0 | 0 | 0 | North America | Open PvP |
| 2 | Antica | 0 | 0 | 0 | 0 | Europe | Open PvP |
| 3 | Astera | 0 | 0 | 0 | 0 | North America | Optional PvP |
| 4 | Belobra | 0 | 0 | 0 | 0 | South America | Optional PvP |
| 5 | Beneva | 0 | 0 | 0 | 0 | Europe | Optional PvP |
+----+---------+---------+--------+--------+----------+---------------+--------------+
例如,我们可以看到玩家John和Sam拥有世界Antica。因此,Antica 在桌面世界中的玩家栏下应该具有值“2”。但只有约翰在 Antica 上在线。因此,世界 Antica 在表“world”中的“online”列下应具有值“1”。等等。我还想要他们在那个世界的平均水平。
如何通过 PHP 进行 SQL 查询来实现此目的?
首先,我需要获取所有世界名称(我认为?)并循环它们。然后获取每个世界的以下详细信息:
玩家数量
在线金额
平均等级金额
然后用这些值更新世界表..
最佳答案
您可以将数据总结为:
select world, count(*) as players, sum(online) as online, avg(level) as avglevel
from players
group by world;
您可以将其合并到更新
中:
update worlds w join
(select world, count(*) as players, sum(online) as online, avg(level) as avglevel
from players
group by world
) p
on w.world = p.world
set w.players = p.player,
w.online = p.online,
w.avglevel = p.avglevel;
我认为维护这样一个单独的表不是一个好主意。毕竟,您始终可以查询 players
来获取此信息。此外,两个系统很快就会过时,因此数据不一致。您可以通过使用触发器来解决这个问题,但这会增加系统的复杂性。一般来说,一个简单的查询就足够了。
关于PHP/SQL - 获取另一列的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48012262/