gpt4 book ai didi

mysql - 重组数据库

转载 作者:行者123 更新时间:2023-11-28 23:56:42 24 4
gpt4 key购买 nike

我有两个相互关联的不同表。

第一个表是tournaments,包含以下字段

tournamentId
tournamentName
tournamentStatus
tournamentBuyIn
tournamentPrizePool
tournamentStart
tournamentEnd
tournamentDuration
tournamentParticipants

第二个表是 tourn_results,其中包含上述锦标赛表的结果。它包含以下字段。

result_id
tournamentId
tournamentName
tournamentDate
playerId
playerName
playerRank
prizeWon
tournamentParticipants

我添加了 tournamentNametournamentDate 字段,以便在搜索超过 1,000,000 条记录时更容易。以前我使用以下代码来提取记录。

SELECT r.playerName,
SUM(CASE WHEN r.playerRank = 1 THEN 1 ELSE 0 END) AS 'FirstPlace',
SUM(CASE WHEN r.playerRank = 1 THEN 1 ELSE 0 END)/Count(*)*100 AS 'WinPercent',
SUM(CASE WHEN r.playerRank = 2 THEN 1 else 0 end) AS 'SecondPlace',
SUM(CASE WHEN r.playerRank = 2 THEN 1 ELSE 0 END)/Count(*)*100 AS 'LosePercent',
COUNT(*) AS 'TotalGames'
FROM `tournaments` t
LEFT
JOIN `tourn_results` r
ON r.tournamentId = t.tournamentId
WHERE t.tournamentName LIKE "Royal Flush Daily"
AND t.tournamentStart BETWEEN '2015-06-08 00:00:00' AND '2015-06-08 23:59:59'
AND (r.playerRank = 1 OR r.playerRank = 2)
GROUP
BY r.playerName
ORDER
BY `FirstPlace` ASC

它一直在很好地计算结果。但是,如果 tournamentName 与我的查询匹配,我想查看每天 有多少记录。我认为最好的方法是将 tournamentDate 和 tournamentName 字段添加到结果数据库。

我现在需要从 tournaments 表中复制 tournamentName 以及 tournamentDate 如果它是 BETWEEN '2015-06 -08 00:00:00' AND '2015-06-08 23:59:59'

我什至不知道如何开始。

示例数据

我将锦标赛缩写为“t_”以节省空间来自 tourn_results

的结果
result_id t_Id   t_Name t_Date     playerId playerName playerRank prizeWon  t_part
1109985 407452 0000-00-00 3008 hvca410 2 0.000 2

应该用 tournaments 表中的信息更新

t_Id   t_Name            t_Start             t_End
407452 Royal Flush Daily 2015-07-16 03:02:00 2015-07-16

新的结果应该如下所示

result_id t_Id   t_Name            t_Date     playerId playerName playerRank prizeWon  t_part
1109985 407452 Royal Flush Daily 2015-07-16 3008 hvca410 2 0.000 2

最佳答案

目前还不完全清楚您想要完成什么,但如果您只想使用锦标赛名称和锦标赛结束日期更新 tourn_results 表,您可以使用以下查询来完成:

update tourn_results tr
join tournaments t on tr.tournamentId = t.tournamentId
set tr.tournamentName = t.tournamentName, tr.tournamentDate = t.tournamentEnd
where t.tournamentEnd BETWEEN '2015-07-16 00:00:00' AND '2015-07-16 23:59:59';

Sample SQL Fiddle

尽管您可以从比赛表中获取名称,但似乎没有必要复制名称,至于日期,如果日期与获得结果的时间有某种关联,岂不是更有意义?我猜还有其他一些表可能会保存比赛的日期。也许那个约会是你真正想要的?

关于mysql - 重组数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31508116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com