【发布时间】:2019-04-10 15:20:12
【问题描述】:
我试图显示两支选定球队之间获胜和平局的百分比,但我发现很难区分任何一支球队。
Connection con = DBConnector.connect();
ResultSet rs = con.createStatement().executeQuery("SELECT DISTINCT t1.title AS title1, t2.title AS title2, g.score1, g.score2, g.winner AS winner, g.team1_id AS team1, g.home AS home FROM games g INNER JOIN teams AS t1 ON g.team1_id = t1.id INNER JOIN teams AS t2 ON g.team2_id = t2.id WHERE (t1.title = '"+team1 +"' AND t2.title = '" +team2+ "') OR (t1.title = '"+team2 +"' AND t2.title = '" +team1+ "');");
while(rs.next()){
if(rs.getString("team1").equals(rs.getString("home"))){
if(rs.getInt("winner") == 1){
teamOneWin++;
}else{
teamTwoWin++;
}
}else if(rs.getInt("winner") == 2){
if(rs.getString("team1").equals(rs.getString("home"))){
teamOneWin++;
}else{
teamTwoWin++;
}
}else if(rs.getInt("winner") == 0){
if(rs.getString("team1").equals(rs.getString("home"))){
draw++;
}
}
我正在检查查询中的 team1 值是否等于查询中的主队值。如果它们相等并且团队 1 是列获胜者中的值,我希望 teamOneWin 增加。我指定获胜者 1、获胜者 2 和获胜者 0(比赛为平局)。我指定这些是因为我有一个未播放的获胜者 3 值。
我知道下面这行是有缺陷的,因为 team1 总是等于主队,但我需要一种方法来区分任何一支球队并根据获胜者的价值增加正确的球队。
if(rs.getString("team1").equals(rs.getString("home"))){
在我的 SQL 中使用 COUNT 会更好吗?
这是我的游戏桌的表格结构:
CREATE TABLE "games" (
"team1_id" integer NOT NULL,
"team2_id" integer NOT NULL,
"home" integer,
"score1" varchar DEFAULT null,
"score2" varchar DEFAULT null,
"winner" integer,
"created_at" DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY("team1_id","created_at"),
FOREIGN KEY("team1_id") REFERENCES "teams"("id"),
FOREIGN KEY("team2_id") REFERENCES "teams"("id")
);
这是我的团队的表结构:
CREATE TABLE "teams" (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"title" varchar NOT NULL,
"code" varchar,
"synonyms" varchar,
"address" varchar,
"web" varchar,
"created_at" DATETIME DEFAULT CURRENT_TIMESTAMP
);
非常感谢。
【问题讨论】:
-
这似乎是在 SQL 中使用
COUNTs 而不是从数据库中加载所有数据并在 Java 中手动计算它会更好。 -
计数是否会与我的 if 完全相同,其中获胜者等于数字和团队 ID?
-
一切都取决于您如何编写 SQL - 如果您在问题中包含
games和teams表的表结构(包括数据类型和任何外键关系)可能会有所帮助 -
请检查我的编辑,我刚刚包含了两者。
-
我认为您真正遇到的问题是您的数据模型无法让您非常容易地获取您想要获取的数据。与其在
winner列中使用值3来指示尚未玩过游戏,不如创建一个BIT列来告诉您是否玩过该游戏。这使您可以将获胜团队的 ID 存储在winner列中(如果平局,则将其留空),这使您更容易收集统计数据,因为您现在可以计算给定 teamId 所在的行数在这两支球队正在比赛的winner列中。
标签: java if-statement