如果你们中的一些人可以帮助优化我的表格,我会非常感激,因为他们目前因为以下问题需要很长时间才能执行:
主表:
game {
game_id [PRIMARY KEY]
*team_id
*stadium_id
home_score
opponent_score
date
tour
half_home_score
half_opp_score
attendance
referee_id
coach_id
captain_id
}
players (contains all players that played in the game) {
*game_id
*team_id
*player_id
position
number
}
tries, conversions, penalties, dropgoals {
*player_id
*game_id
*team_id
}
team {
team_id [PRIMARY KEY]
country
}
player {
player_id [PRIMARY KEY]
*team_id
name
surname
fullname
DOB
POB
school
height
weight
position
}
我倾向于制作所有类型的* _id(UNSIGNED INT [5])?我不确定是否需要UNSIGNED
所有文字都是VARCHAR(500..200),具体取决于所需的尺寸
我可以使用DATE类型。 DOB,日期
'*' - 指的是作为其他表中主键的外键
一页特别慢,会发生以下情况:
该页面显示了特定游戏的玩家阵容,因此我的查询如下:
选择所有player_id的,数字,位置FROM玩家表WHERE game_id是特定游戏的id 来自尝试表的getTries(player_id,game_id) 。 。 来自dropgoals表的getDropgoals(player_id,game_id)
来自播放器表的getPlayerName(player_id)
输出以表示收到的详细信息
<tr>
<td>tries</td>...<td>dropgoals</td><td>position</td><td>player's name</td><td>number</td></tr>
如果有人能指出一些明显的陷阱,我真的很感激。
此致
//编辑
我使用了以下查询,但它只输出了在try表中找到的行,我希望它输出找到的所有玩家,但只计算他得分的尝试次数,如果没有得分的尝试玩家,它仍然必须输出玩家的详细信息,但是对于尝试得分,则必须输出0。
我不确定我的查询是否正确: SELECT ps.player_id,ps.position,ps.number,p.name,p.surname,COUNT(*)AS triesNo FROM players ps,player p,尝试WHERE p.player_id = ps.player_id AND ps.game_id ='$ game_id'AND ps.team_id IS NULL AND tries.player_id = ps.player_id GROUP BY ps.player_id ORDER BY ps.number
如果他没有得分,我希望它能让球员回归,现在只有在尝试进球时才能让球员回归。
有人可以帮忙吗?
答案 0 :(得分:1)
根据它的声音,如果您一次从多个表中进行选择,则可能是(a)在页面加载时运行了太多查询,或者(b)未在相应字段上加入数据。
例如,根据您的说法,您似乎运行了一整套查询来获取玩家名称,但您可以将其与第一个查询合并,如下所示:
SELECT ps.player_id, ps.position, ps.number, p.name
FROM players ps, player p
WHERE p.player_id=ps.player_id
该查询加入了player_id上的两个表格,最终得到了一组id / position / number / name的玩家。
您可能还想查看索引。索引WHERE子句中使用的任何字段(尚未使用主键索引)是个好主意。
正如其他人所说,你需要更具体地了解哪些查询运行缓慢。
答案 1 :(得分:0)
无符号将使您具有更大(双倍大小)的int id列。缺点是你将无法使用负面的ID(无论如何都是邪恶的。)