LLaumgui
vendredi 18 mars 2005 à 22:44
get_advinfo() -> -5 requêtes !!!Attention, je me sert beaucoup de cette fonction d'où les 5 requêtes. Vous pouvez en gagner moins
mais plus.Cette dernière fonctions ne tiens pas compte des guests. En effet un guest à une mid = 0. La fonction effectue donc la requêtes :
SQL
SELECT m.*, me.signature, me.avatar_size, me.avatar_location, me.avatar_type, me.vdirs,
me.location, me.msnname, me.interests, me.yahoo, me.website, me.aim_name, me.icq_number,
g.*, cf.*
FROM ibf_members m
LEFT JOIN ibf_groups g ON (m.mgroup=g.g_id)
LEFT JOIN ibf_pfields_content cf ON (cf.member_id=m.id)
LEFT JOIN ibf_member_extra me ON (me.id=m.id)
WHERE m.id='0'
Cette requête ne retournant rien, n'alimente pas le cache. On interoge x fois la fonction on a toujours pas de cache, donc on refait la requête !!!
La solution :
CODE
/**
* Grabs detailed information on a member.
* Modification : Gestion des guest.
* @author Guillaume Kulakowski <llaumgui_AT_xperience-fr.net>
* @author Pita (conversion to 2.0) <peter@randomnity.com>
* @author Cow <khlo@global-centre.com>
* @param integer $memberid
* @return array Member Information, or FALSE on failure
* @see get_info(),get_avatar(),get_raw_sig(),get_photo(),get_member_pips(),get_member_i
con(),get_num_new_posts(),get_skin_id()
*/
function get_advinfo($memberid = '') {
if (!$memberid)
{ $memberid = $GLOBALS['ibforums']->member['id']; }
// Gestion des guests non présentes de base ! :
if ( empty($memberid) || $memberid == 0 )
{ return false; }
else if ($cache = $this->get_cache('get_advinfo', $memberid))
{ return $cache; }
else
{
$this->DB->query ("SELECT m.*, me.signature, me.avatar_size, me.avatar_location, me.avatar_type, me.vdirs,
me.location, me.msnname, me.interests, me.yahoo,
me.website, me.aim_name, me.icq_number,
g.*, cf.*
FROM ibf_members m
LEFT JOIN ibf_groups g ON (m.mgroup=g.g_id)
LEFT JOIN ibf_pfields_content cf ON (cf.member_id=m.id)
LEFT JOIN ibf_member_extra me ON (me.id=m.id)
WHERE m.id='" . intval($memberid) . "'");
if ($this->DB->get_num_rows())
{
$info = $this->DB->fetch_row();
$this->save_cache('get_advinfo', $memberid, $info);
return $info;
}
else
{ return FALSE; }
}
}