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

網站架設,免費空間申請,架站技術交流區

ETERNAL
 
文章: 2937
註冊時間: 2003-12-03 11:08 pm
性別: 男生

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

文章ETERNAL » 2005-10-02 11:43 pm

安裝虛擬形象時

在viewtopic.php裡面有一段
代碼: 選擇全部
            $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);


這段於法由於是放在顯示主題所回覆內容的迴圈裡面
該討論主題內,會員使用的虛擬形象越多,會造成越多的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;
               }


這段式判斷你身上的衣服是否過期
我覺得舊衣櫃這功能很無聊,強迫人換衣服
所以就把這功能拿掉了

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

代碼: 選擇全部
userid,classid,facepicid

改成
代碼: 選擇全部
*



代碼: 選擇全部
               $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;
               }




訪客
 

文章訪客 » 2005-10-24 10:44 am

謝謝 ETERNAL 管理員
在下有個問題請教
如果我要徹底移除衣服過期問題
在其他有衣服過期的程式碼,例如 usercp_viewprofile.php 等
改法是否一樣呢?
謝謝!




ETERNAL
 
文章: 2937
註冊時間: 2003-12-03 11:08 pm
性別: 男生

文章ETERNAL » 2005-10-24 8:02 pm

是的 改法一樣
拿掉下面程式碼就可以了
代碼: 選擇全部
               $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=".$profiledata['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;
               }




chicken
 
文章: 4
註冊時間: 2005-06-13 10:25 am

文章chicken » 2005-10-24 9:12 pm

感謝 ETERNAL 管理員熱心指導
上面那一篇是我發問的
沒注意到是以訪客的身份發問
真是抱歉 :face6:




回到 架站討論

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 7 位訪客

cron