[心得]虛擬形象2.20 提升執行效能

phpBB 2 MOD Support
無論是官方或非官方認證之外掛,安裝與使用問題討論。
(發表文章請按照公告格式發表,違者砍文)

版主: 版主管理群

主題已鎖定
ETERNAL
星球公民
星球公民
文章: 297
註冊時間: 2002-01-23 11:23

[心得]虛擬形象2.20 提升執行效能

文章 ETERNAL »

安裝虛擬形象時

在viewtopic.php裡面有一段\r

代碼: 選擇全部

				$sql="SELECT * FROM week9_userdata where userid = ".$postrow[$i]['user_id']." and dafaultuse = '1' and (face_fitherd = '$sex' or face_fitherd = 't')";
				if( !($result = $db->sql_query($sql)) )
				{
					message_die(GENERAL_ERROR, 'Could not query week9_userdata', '', __LINE__, __FILE__, $sql);
				}
				while ($usercaifu = $db->sql_fetchrow($result))
				{	
					$tempi = $usercaifu[classid];
					$cookiearray[$tempi] = $usercaifu[facepicid];
					$face_weardate = floor($usercaifu[face_wear] - (time() - $usercaifu[buydata])/8640);
					if ($face_weardate <= 0)
					{
						$db->sql_query("UPDATE week9_userdata SET dafaultuse = '3' WHERE userid=".$postrow[$i]['user_id']." and facepicid = '$usercaifu[facepicid]' and classid= '$usercaifu[classid]' and dafaultuse='1'");
						if($usercaifu[classid] == 8||$usercaifu[classid]==9||$usercaifu[classid]==11||$usercaifu[classid]==13||$usercaifu[classid]==14||$usercaifu[classid]==18)
						{
							$userupid = $upid;
						}
						else
						{
							$userupid = "0";
						}
						$weararray[$tempi] = $userupid;
					}
					else
					{
						$weararray[$tempi] = $face_weardate;
					}
				}
				$db->sql_freeresult($result);
這段於法由於是放在顯示主題所回覆內容的迴圈裡面\r
該討論主題內,會員使用的虛擬形象越多,會造成越多的query

改進的方法如下

在檔案內找尋

代碼: 選擇全部

$postrow = array();
後面加上

代碼: 選擇全部

$postrow_userid = array();
找尋

代碼: 選擇全部

		$postrow[] = $row;
後面加上

代碼: 選擇全部

		$postrow_userid[]=$row['user_id'];
找尋

代碼: 選擇全部

   sync('topic', $topic_id); 
   message_die(GENERAL_MESSAGE, $lang['No_posts_topic']); 
}
後面加上

代碼: 選擇全部

$sql="SELECT userid,classid,facepicid FROM week9_userdata where userid in (".implode(',',$postrow_userid).") and dafaultuse = '1' order by  userid";
if ( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, "Could not query week9_userdata.", '', __LINE__, __FILE__, $sql);
}
unset($postrow_userid);
$face_user = array();
while( $row = $db->sql_fetchrow($result) )
{
	$face_user[$row['userid']][]=$row;
}
$db->sql_freeresult($result);
找尋

代碼: 選擇全部

				$sql="SELECT * FROM week9_userdata where userid = ".$postrow[$i]['user_id']." and dafaultuse = '1' and (face_fitherd = '$sex' or face_fitherd = 't')";
				if( !($result = $db->sql_query($sql)) )
				{
					message_die(GENERAL_ERROR, 'Could not query week9_userdata', '', __LINE__, __FILE__, $sql);
				}
				while ($usercaifu = $db->sql_fetchrow($result))
				{	
					$tempi = $usercaifu[classid];
					$cookiearray[$tempi] = $usercaifu[facepicid];
					$face_weardate = floor($usercaifu[face_wear] - (time() - $usercaifu[buydata])/8640);
					if ($face_weardate <= 0)
					{
						$db->sql_query("UPDATE week9_userdata SET dafaultuse = '3' WHERE userid=".$postrow[$i]['user_id']." and facepicid = '$usercaifu[facepicid]' and classid= '$usercaifu[classid]' and dafaultuse='1'");
						if($usercaifu[classid] == 8||$usercaifu[classid]==9||$usercaifu[classid]==11||$usercaifu[classid]==13||$usercaifu[classid]==14||$usercaifu[classid]==18)
						{
							$userupid = $upid;
						}
						else
						{
							$userupid = "0";
						}
						$weararray[$tempi] = $userupid;
					}
					else
					{
						$weararray[$tempi] = $face_weardate;
					}
				}
				$db->sql_freeresult($result);
替換成

代碼: 選擇全部

				for($face_count=0;$face_count<count($face_user[$postrow[$i]['user_id']]);$face_count++)
				{
					$tempi = $face_user[$postrow[$i]['user_id']][$face_count]['classid'];
					$cookiearray[$tempi] = $face_user[$postrow[$i]['user_id']][$face_count]['facepicid'];
				}
				$userface = implode("-", $cookiearray);
#####到此修改結束#####

接著你可能會問下面段跑哪去了

代碼: 選擇全部

					$face_weardate = floor($usercaifu[face_wear] - (time() - $usercaifu[buydata])/8640);
					if ($face_weardate <= 0)
					{
						$db->sql_query("UPDATE week9_userdata SET dafaultuse = '3' WHERE userid=".$postrow[$i]['user_id']." and facepicid = '$usercaifu[facepicid]' and classid= '$usercaifu[classid]' and dafaultuse='1'");
						if($usercaifu[classid] == 8||$usercaifu[classid]==9||$usercaifu[classid]==11||$usercaifu[classid]==13||$usercaifu[classid]==14||$usercaifu[classid]==18)
						{
							$userupid = $upid;
						}
						else
						{
							$userupid = "0";
						}
						$weararray[$tempi] = $userupid;
					}
					else
					{
						$weararray[$tempi] = $face_weardate;
					}
這段式判斷你身上的衣服是否過期
我覺得舊衣櫃這功能很無聊,強迫人換衣服
所以就把這功能拿掉了

若你想把這功能加上去\r
改法也很簡單(但是我沒測試過)

代碼: 選擇全部

userid,classid,facepicid
改成

代碼: 選擇全部

*
在\r

代碼: 選擇全部

					$cookiearray[$tempi] = $face_user[$postrow[$i]['user_id']][$face_count]['facepicid'];
之後加上

代碼: 選擇全部

	$face_weardate = floor($face_user[$postrow[$i]['user_id']][$face_count][face_wear] - (time() - $face_user[$postrow[$i]['user_id']][$face_count][buydata])/8640);
					if ($face_weardate <= 0)
					{
						$db->sql_query("UPDATE week9_userdata SET dafaultuse = '3' WHERE userid=".$postrow[$i]['user_id']." and facepicid = '$face_user[$postrow[$i]['user_id']][$face_count][facepicid]' and classid= '$face_user[$postrow[$i]['user_id']][$face_count][classid]' and dafaultuse='1'");
						if($face_user[$postrow[$i]['user_id']][$face_count][classid] == 8||$face_user[$postrow[$i]['user_id']][$face_count][classid]==9||$face_user[$postrow[$i]['user_id']][$face_count][classid]==11||$face_user[$postrow[$i]['user_id']][$face_count][classid]==13||$face_user[$postrow[$i]['user_id']][$face_count][classid]==14||$face_user[$postrow[$i]['user_id']][$face_count][classid]==18)
						{
							$userupid = $upid;
						}
						else
						{
							$userupid = "0";
						}
						$weararray[$tempi] = $userupid;
					}
					else
					{
						$weararray[$tempi] = $face_weardate;
					}
水色論壇 http://www.et99.net
簡德賢分享
taicomjp
星球公民
星球公民
文章: 32
註冊時間: 2004-08-19 00:00

文章 taicomjp »

$face_weardate = floor($face_user[$postrow[$i]['user_id']][$face_count][face_wear] - (time() - $face_user[$postrow[$i]['user_id']][$face_count][buydata])/8640);
if ($face_weardate <= 0)
{
$db->sql_query("UPDATE week9_userdata SET dafaultuse = '3' WHERE userid=".$postrow[$i]['user_id']." and facepicid = '$face_user[$postrow[$i]['user_id']][$face_count][facepicid]' and classid= '$face_user[$postrow[$i]['user_id']][$face_count][classid]' and dafaultuse='1'");
if($face_user[$postrow[$i]['user_id']][$face_count][classid] == 8||$face_user[$postrow[$i]['user_id']][$face_count][classid]==9||$face_user[$postrow[$i]['user_id']][$face_count][classid]==11||$face_user[$postrow[$i]['user_id']][$face_count][classid]==13||$face_user[$postrow[$i]['user_id']][$face_count][classid]==14||$face_user[$postrow[$i]['user_id']][$face_count][classid]==18)
{
$userupid = $upid;
}
else
{
$userupid = "0";
}
$weararray[$tempi] = $userupid;
}
else
{
$weararray[$tempi] = $face_weardate;
}
加上去之後不能跑
應該沒有貼錯\r
沒加這段可以跑
加了就變空白頁
也就是錯誤頁
主題已鎖定

回到「外掛問題討論」