Mistři v programování na #hovnokod

PHP #1020

Databázový server začal být postupem času neúnosně přetížený (až 15.000 SQL dotazů za sekundu). Po analýze logu všech SQL dotazů během jedné hodiny (cca 22.600.000) jsme došli až k následujícímu skriptu, který byl spouštěný každých 10 minut... a ve skutečnosti nedělal vůbec nic. Několik minut po jeho odstranění zátěž klesla z 15.000 na 20 dotazů za sekundu.

$res=mysql_query("select * from events where start_time<='".$enDate."' and end_time>='".$enDate."' ");
while($row=mysql_fetch_array($res))
{
	$resUser=mysql_query("select * from users");
	while($rowUser=mysql_fetch_array($resUser))
	{
		$resCat=mysql_query("select * from subscribe_categories where userid='".$rowUser['id']."' and categoryid='".$row['categoryid']."' ");
		if($rowCat=mysql_fetch_array($resCat)) //Category MATCHED
		{
			$resCity=mysql_query("select * from subscribe_cities where userid='".$rowUser['id']."' and cityid='".$row['cityid']."' ");
			if($rowCity=mysql_fetch_array($resCity))
			{
				//EMAIL PROCESS START
				$out="Event Title: ".$row['event_title']."<br>";
				$out.="Event Start: ".$row['start_time']."<br>";
				$out.="Event End: ".$row['end_time']."<br>";

				$resEL=mysql_query("select count(*) from email_log where email='".$rowUser['email']."' and eventid='".$row['id']."' ");
				$rowEL=mysql_fetch_array($resEL);
				if($rowEL[0]==0)//EMAIL HAS NOT BEEN SENT YET
				{
					//SEND IT NOW
					//mysql_query("insert into email_log (email,eventid) values('".$rowUser['email']."','".$row['id']."') ");

					$resNT=mysql_query("select * from newsletter_template where type=1 ");
					while($rowNT=mysql_fetch_array($resNT))
					{
						$template=str_replace("#event-detail#",$out,$rowNT['body']);
						//sendmail($rowUser['email'],$rowNT['subject'],$template);
					}//$rowNT
				}
				//EMAIL PROCESS END
			}//$rowCity
		}//$rowCat
	}//while
}

Anonymous,