我有一个在线橄榄球经理游戏。每个注册用户都有一个团队,每个团队最初有25个玩家。有友谊,联赛,杯赛。
我想为每个玩家页面显示以下数字:
并为每个类别:
我有两个选择:
$query = "SELECT id FROM tbl_matches WHERE type='0' AND standing='1'";
$query = mysql_query($query, $is_connected) or die('Can\'t connect to database.');
while ($match = mysql_fetch_array($query)) {
$query2 = "SELECT COUNT(*) as 'number' FROM tbl_comm WHERE matchid='$match[id]' AND player='$player' and result='5'";
$query2 = mysql_query($query2, $is_connected) or die('Can\'t connect to database.');
$try = mysql_fetch_array($query2);
}
此脚本搜索所选玩家所玩的每场正式比赛。然后得到该比赛的报告(每场比赛大约20条评论线)并检查每一行是否搜索过的球员有一次尝试。
问题是,在几个季节里,评论页面可能会有大约2 000 000行。我的脚本会加载缓慢(用户值得注意)吗?
第二个选项是创建一个包含玩家统计数据的表格,其中大约有21个小组。
你建议我做什么?
答案 0 :(得分:1)
为什么所有这些单独的查询都可以将它们全部组合在一起并按ID计算:
select tbl_matches.id,count(*)
from tbl_matches join tbl_comm on tbl_matches.id = tbl_comm.matchid
where tbl_comm.player = '$player'
and tbl_comm.result = '5'
and tbl_matches.type='0'
and tbl_matches.standing='1'
group by tbl_matches.id;
如果您需要其他列,只需将它们添加到选择列和逐列列表中。
另外:您应该非常谨慎地将$player
直接替换为您的查询。如果该字符串未正确转义,则可能是SQL注入攻击的来源。
编辑:根据Jonathan的评论修复查询