Php 限制数据库查询的数量
在阅读我的问题之前,请记住以下是我在一个个人项目中学习/扩展我的php/mysql技能所做的工作,因此我仍然是一个新手,因为我确信在我接下来的代码中可以明显看出这一点。然而,任何提示/帮助都值得赞赏 我的应用程序做什么 我的网站允许用户猜测一场体育比赛的结果,比赛结束后,结果会被上传,获胜的成员会得到奖励积分 用于验证获奖者的Psuedo代码 上传事件/体育比赛的结果 将旧事件从activeEvents表移动到expiredEvents表 现在从activeEvents表中删除事件数据 检查谁在picks表中猜对了正确的匹配结果 在步骤1中上载数据 将猜对的获胜成员插入winners表 将旧拾取数据移动到expiredPicks表 从activePicks表中删除移动到expiredPicks表的数据 我的问题 对于上面描述的每一步,我都会对数据库进行一次新的查询,这不仅会导致响应时间变慢,而且似乎效率很低。我正在寻找一些关于如何保持相同功能并改进代码的建议Php 限制数据库查询的数量,php,mysql,mysqli,Php,Mysql,Mysqli,在阅读我的问题之前,请记住以下是我在一个个人项目中学习/扩展我的php/mysql技能所做的工作,因此我仍然是一个新手,因为我确信在我接下来的代码中可以明显看出这一点。然而,任何提示/帮助都值得赞赏 我的应用程序做什么 我的网站允许用户猜测一场体育比赛的结果,比赛结束后,结果会被上传,获胜的成员会得到奖励积分 用于验证获奖者的Psuedo代码 上传事件/体育比赛的结果 将旧事件从activeEvents表移动到expiredEvents表 现在从activeEvents表中删除事件数据 检查谁在
if(isset($_POST['resultBtn'])){
//STEP 1:----GET GAME INFO
foreach($_POST['winner'] as $id =>$winner){
$winScore = $_POST['score'][$id];
$teamsel[] = $winner ;
$team1 = $_POST['team1'][$id];
$team2 = $_POST['team2'][$id];
$venue = $_POST['ven'][$id];
$matchId = $_POST['gameId'][$id]; //match Id
$score = $_POST['score'][$id]; //score
$tour = $_POST['tournament'][$id];
$round = $_POST['round'][$id];
$event_date = $_POST['event_date'][$id];
$gameNR = $_POST['gameNr'][$id];
$sport=$_POST['sport'][$id];
//STEP 2:----INSERT event info into expiredEvents
$sql="INSERT INTO expiredEvents (event_id, sport_type, tournament,
round, team1, team2, venue, event_date)
VALUES
('$matchId', '$sport', '$tour', '$round',
'$team1', '$team2','$venue','$event_date')";
mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);
//STEP 3:----DELETE event/match from events table
$sql ="DELETE FROM events WHERE event_id ='$matchId'";
$result = mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);
//Step4: ----check for winner(s) in picks table with given data
$sql="select * from picks where event_id = '$matchId' and
abs(score-$winScore) = (select min(abs(score-$winScore)) from picks
where pick = '$winner');";
$result = mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);
while($row = mysql_fetch_array($result)){
$winingMember = $row['member_nr'];
$event = $row['event_id'];
$pick = $row['pick'];
$score = $row['score'];
echo'<br />';
echo $winingMember;
echo'<br />';
echo $event;
echo'<br />';
echo $pick;
echo'<br />';
echo $score;
echo'<br />';
echo $event_date;
echo'<br />';
//step5 insert winners into winners table
$sql="INSERT INTO winners
(member_nr,event_id, pickedTeam,pickedScore,event_date)
VALUES
('$winingMember','$event','$pick','$score','$event_date')";
mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);
}//while
//Step 6 move old pick data to expired picks table
$sql="INSERT INTO expiredPicks (select * from picks WHERE event_id = '$matchId'";
$result = mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);
//step7: --Delete expired picks
$sql="DELETE FROM picks where event_id='$matchId'";
$result = mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);
}//for each
}//isset
只是想一想,重新设计您的表并使用join来更有效地处理查询
Table1 Sports Id - Event - Result - Date From - Date To
Table2 Users Id - Name
Table3 Picks Id - Pick - Event (FK to Sports.Id) - Name (FK to Users.Id)
Table4 Winners Id - Winner (FK to Users.ID) - Credit(?)
现在对于表1,若要检查完成了哪个事件,只需检查结果不为null的位置,当事件完成时,就可以使用结果更新表
这只是初步的想法,即使从现在开始,我认为还需要做更多的工作,但这应该足以让您开始。旁注,特别是因为您正在提高技能,停止使用mysql扩展确实是个好主意。由于它们不安全,因此不推荐使用它们,这是有充分理由的。查看mysqli_uuu准备的语句或PDO。对于大型查询,它们的运行速度也会快很多。操作查询似乎不是瓶颈,但表单会在多个记录中循环,从而对网页执行的多个步骤进行迭代。然而,步骤4查询可以使用优化,因为它在where子句中使用子查询。考虑使用“活动”VS“过期”值的状态栏,以减少插入和删除操作到一列更新中的事件和选择。