亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Mysql 列摘要

Mysql 列摘要

PHP
慕斯709654 2023-07-21 18:31:12
我需要將每一行的列匯總在一起,就像排行榜一樣。外觀如何:Name | country | track 1 | track 2 | track 3 | Total  John     ENG       32        56        24 Peter    POL       45        43        35這里有兩個問題,我可以使用update 'table' set Total = track 1 + track 2 + track 3但它并不總是 3 個軌道,從 3 到 20 個不等。 其次,如果我不在 mysql 中對其進行求和,那么當我在 HTML/php 中呈現數據時,我將無法對它進行排序?;蛘哌€有其他一些聰明的方法來構建排行榜嗎?
查看完整描述

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 小提琴示例設計很差,創建名稱、國家/地區和跟蹤主鍵也可能是件好事,這樣對于給定的名稱、國家/地區和跟蹤組合,您只能擁有一個“數據”值。然而,這個決定以及將表規范化為多個連接表的決定將基于您期望獲得的數據。


但無論哪種方式,只要您說“我不知道會有多少個軌道”,那么您就應該開始思考“每個軌道的數據出現在一行而不是一列中”。


查看完整回答
反對 回復 2023-07-21
?
蝴蝶刀刀

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 他們是如何建立這樣的排行榜的?排序和一切。


查看完整回答
反對 回復 2023-07-21
?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

就像其他人提到的那樣,您需要重新設計數據庫。您的Leaderboard表和新的Tracks表之間需要建立一對多關系。這意味著一個用戶可以擁有?多個軌道,每個軌道由軌道表中的一條記錄表示。

這兩個數據庫應該通過外鍵連接,在本例中它可以是user_id字段。

每次插入或更新新曲目時,排行榜表中的字段total都可以更新,或者您可以有一個與您想要的查詢類似的查詢。此類查詢如下所示

UPDATE?leaderboard?SET?total?=?(
??SELECT?SUM(track)?FROM?tracks?WHERE?user_id?=?leaderboard.user_id
)
查看完整回答
反對 回復 2023-07-21
  • 3 回答
  • 0 關注
  • 146 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號