刚接触农场,看这几天大家都讨论代码优化问题,也发表一下看法。注:以前也没接触过PHP代码,代码看不太懂;对flash的工作原理更是一点也不了解,只能模仿代码里的写法来写,见笑了。开始工作了:
大家反映读好友列表效率低问题,我看了下代码,主要是数据库交互次数太多(小小宇做了个冗余字段来改善,可能是考虑数据同步问题,又删了),针对这个问题可以做一下优化:
原始代码(农场,牧场方法一样,只是表happyfarm_nc换成happyfarm_mc)- $Config = $_SGLOBAL['db']->query( "SELECT uid,money,pf,vip FROM ".tname( "happyfarm_config" )." WHERE uid IN (".$space[friend].$UID.")" );
- while ( $value = $_SGLOBAL['db']->fetch_array( $Config ) )
- {
- $list[$value['uid']] =$value;
- }
- $query = $_SGLOBAL['db']->query( "SELECT uid,exp FROM ".tname( "happyfarm_nc" )." where uid IN (".$space[friend].$UID.")" );
- while ( $value = $_SGLOBAL['db']->fetch_array( $query ) )
- {
- $list[$value['uid']] =array_merge( $list[$value['uid']], $value );
- }
- $friendid = "";
- foreach ( $list as $value )
- {
- $friendid = $friendid.$value[uid];
- $friendid = $friendid.",";
- }
- $friendid = substr( $friendid, 0, -1 );
- $query = $_SGLOBAL['db']->query( "SELECT uid,username,name FROM ".tname( "space" )." WHERE uid IN (".$friendid.")" );
- while ( $value = $_SGLOBAL['db']->fetch_array( $query ) )
- {
- $list[$value['uid']] = array_merge( $list[$value['uid']], $value );
- }
复制代码 修改后:- $Config = $_SGLOBAL['db']->query( "SELECT C.uid,C.money,C.pf,C.vip,N.exp,S.username,S.name FROM ".tname( "happyfarm_config" )." C Left JOIN ".tname( "happyfarm_nc" )." N ON N.uid=C.uid LEFT JOIN ".tname( "space" )." S ON S.uid=C.uid WHERE C.uid IN (".$space[friend].$UID.")" );
- while ( $value = $_SGLOBAL['db']->fetch_array( $Config ) )
- {
- $list[] =$value;
- }
复制代码 把三次数据库访问及若干数据处理简化为一次数据库访问,代码也变短了,大家可以试一下。 |