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 關注
- 146 瀏覽
添加回答
舉報