3 回答

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊
您需要重新設(shè)計(jì)表格,以包含名稱、國(guó)家/地區(qū)、曲目編號(hào)和數(shù)據(jù)的列。然后,如果有一個(gè)只有 3 個(gè)曲目編號(hào)的寬表,那么您將擁有一個(gè)又高又薄的表格,每行都是給定名稱、國(guó)家/地區(qū)和曲目的數(shù)據(jù)。
然后你可以使用類似的東西來(lái)總結(jié)
SELECT
country,
name,
sum(data) as total
FROM trackdata
GROUP BY
name,
country
ORDER BY
sum(data) desc
看看這里我做了一個(gè) SQL 小提琴,顯示它按照你想要的方式工作
然而,根據(jù)您的預(yù)期數(shù)據(jù),您可能真的最好為國(guó)家/地區(qū)建立一個(gè)單獨(dú)的表,其中每個(gè)國(guó)家/地區(qū)名稱僅出現(xiàn)一次(也可能用于名稱)。例如,如果 John 始終與 ENG 關(guān)聯(lián),那么您有一個(gè)重復(fù)組,最好從上表中刪除該關(guān)聯(lián),該關(guān)聯(lián)實(shí)際上與賽道上的分?jǐn)?shù)有關(guān),而不是與誰(shuí)在哪個(gè)國(guó)家/地區(qū)有關(guān),并將其放入自己的表中,然后將其連接到賽道數(shù)據(jù)。
完整的解決方案可能包含下表
**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
根據(jù)您的數(shù)據(jù),它可能會(huì)變得更加復(fù)雜,例如相同的曲目編號(hào)是否會(huì)出現(xiàn)在不同的國(guó)家/地區(qū)?如果是這樣,那么您需要另一個(gè)連接表來(lái)將一個(gè)軌道號(hào)碼連接到許多國(guó)家。
或者,即使我的 SQL 小提琴示例設(shè)計(jì)很差,創(chuàng)建名稱、國(guó)家/地區(qū)和跟蹤主鍵也可能是件好事,這樣對(duì)于給定的名稱、國(guó)家/地區(qū)和跟蹤組合,您只能擁有一個(gè)“數(shù)據(jù)”值。然而,這個(gè)決定以及將表規(guī)范化為多個(gè)連接表的決定將基于您期望獲得的數(shù)據(jù)。
但無(wú)論哪種方式,只要您說(shuō)“我不知道會(huì)有多少個(gè)軌道”,那么您就應(yīng)該開始思考“每個(gè)軌道的數(shù)據(jù)出現(xiàn)在一行而不是一列中”。

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
我仍然遇到很多問題......但我不認(rèn)為問題出在數(shù)據(jù)庫(kù)上,我認(rèn)為問題更多在于我在網(wǎng)絡(luò)上發(fā)布日期的方式。我能夠獲取所有數(shù)據(jù)等。唯一的問題是我的填寫方式不正確。
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>
....
問題是,使用這個(gè)靜態(tài)表解決方案很難將排序、排序和求和全部放在一起。我四處尋找排行榜,我真的不明白他們是如何通過(guò)活躍訂單等來(lái)構(gòu)建排行榜的。https://www.pgatour.com/leaderboard.html 他們是如何建立這樣的排行榜的?排序和一切。

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
就像其他人提到的那樣,您需要重新設(shè)計(jì)數(shù)據(jù)庫(kù)。您的Leaderboard表和新的Tracks表之間需要建立一對(duì)多關(guān)系。這意味著一個(gè)用戶可以擁有?多個(gè)軌道,每個(gè)軌道由軌道表中的一條記錄表示。
這兩個(gè)數(shù)據(jù)庫(kù)應(yīng)該通過(guò)外鍵連接,在本例中它可以是user_id字段。
每次插入或更新新曲目時(shí),排行榜表中的字段total
都可以更新,或者您可以有一個(gè)與您想要的查詢類似的查詢。此類查詢?nèi)缦?em>所示:
UPDATE?leaderboard?SET?total?=?( ??SELECT?SUM(track)?FROM?tracks?WHERE?user_id?=?leaderboard.user_id )
- 3 回答
- 0 關(guān)注
- 154 瀏覽
添加回答
舉報(bào)