3 回答
TA贡献1863条经验 获得超2个赞
您需要重新设计表格,以包含名称、国家/地区、曲目编号和数据的列。然后,如果有一个只有 3 个曲目编号的宽表,那么您将拥有一个又高又薄的表格,每行都是给定名称、国家/地区和曲目的数据。
然后你可以使用类似的东西来总结
SELECT
country,
name,
sum(data) as total
FROM trackdata
GROUP BY
name,
country
ORDER BY
sum(data) desc
看看这里我做了一个 SQL 小提琴,显示它按照你想要的方式工作
然而,根据您的预期数据,您可能真的最好为国家/地区建立一个单独的表,其中每个国家/地区名称仅出现一次(也可能用于名称)。例如,如果 John 始终与 ENG 关联,那么您有一个重复组,最好从上表中删除该关联,该关联实际上与赛道上的分数有关,而不是与谁在哪个国家/地区有关,并将其放入自己的表中,然后将其连接到赛道数据。
完整的解决方案可能包含下表
**Athlete**
athlete_id
athlete_name
(other data about athletes)
**Country**
country_id
country_name
(other data about countries)
**Track**
Track_id
Track_number
(other data about tracks)
**country_athlete** (this joining table allows for the one to many of one country having many athletes
country_athlete_id
country_id
athlete_id
**Times**
country_athlete_id <--- this identifies a given combination of athlete and country
track_id <--- this identifies the track
data <--- this is where you store the actual time
根据您的数据,它可能会变得更加复杂,例如相同的曲目编号是否会出现在不同的国家/地区?如果是这样,那么您需要另一个连接表来将一个轨道号码连接到许多国家。
或者,即使我的 SQL 小提琴示例设计很差,创建名称、国家/地区和跟踪主键也可能是件好事,这样对于给定的名称、国家/地区和跟踪组合,您只能拥有一个“数据”值。然而,这个决定以及将表规范化为多个连接表的决定将基于您期望获得的数据。
但无论哪种方式,只要您说“我不知道会有多少个轨道”,那么您就应该开始思考“每个轨道的数据出现在一行而不是一列中”。
TA贡献1801条经验 获得超8个赞
我仍然遇到很多问题......但我不认为问题出在数据库上,我认为问题更多在于我在网络上发布日期的方式。我能够获取所有数据等。唯一的问题是我的填写方式不正确。
What I do now is like: "SELECT * FROM `times` NATURAL JOIN `players`
Then <?php foreach... ?>
<tr>
<td> <?php echo $row[playerID];?> </td>
<td> <?php echo $row[Time];?> </td>
....
问题是,使用这个静态表解决方案很难将排序、排序和求和全部放在一起。我四处寻找排行榜,我真的不明白他们是如何通过活跃订单等来构建排行榜的。https://www.pgatour.com/leaderboard.html 他们是如何建立这样的排行榜的?排序和一切。
TA贡献1998条经验 获得超6个赞
就像其他人提到的那样,您需要重新设计数据库。您的Leaderboard表和新的Tracks表之间需要建立一对多关系。这意味着一个用户可以拥有 多个轨道,每个轨道由轨道表中的一条记录表示。
这两个数据库应该通过外键连接,在本例中它可以是user_id字段。
每次插入或更新新曲目时,排行榜表中的字段total
都可以更新,或者您可以有一个与您想要的查询类似的查询。此类查询如下所示:
UPDATE leaderboard SET total = ( SELECT SUM(track) FROM tracks WHERE user_id = leaderboard.user_id )
- 3 回答
- 0 关注
- 110 浏览
添加回答
举报