需要帮助重新组织数据库

时间:2015-07-20 02:35:41

标签: mysql

我有两个彼此相关的不同表格。

第一个表格是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 and tournamentName字段添加到结果数据库中。

我现在需要复制tournamentName表中的tournaments以及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

1 个答案:

答案 0 :(得分:1)

目前还不完全清楚你要完成什么,但如果你只想用锦标赛名称和tournamentend日期更新import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger; public class Test { public static void main(String[] args) { String dateText = "18/07/2015 05:30"; DateFormat fechas = new SimpleDateFormat("dd/MM/yyyy hh:mm"); try { Date parse = fechas.parse(dateText); System.out.println("Date : " + fechas.format(parse)); } catch (ParseException ex) { Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); } } } 表,你可以使用下面的查询来完成:

tourn_results

Sample SQL Fiddle

似乎没有必要复制名称,因为你可以从锦标赛表中得到它,至于日期,如果日期某种程度上与获得结果有关,那会不会更有意义?我猜测还有一些其他桌子可以保存比赛的日期。也许这个日期是你真正想要的?