Problemă funcție care numără prietenii online, din scripturile Lavalair

În acest articol ofer o alternativă mult mai optimizată, alternativă la funcția getonbuds() originală din scripturile Lavalair.
Funcția oferită în acest articol numără prietenii online, dar contorizarea nu se face în php, ci în mysql, ceeace ajută destul de mult la membrii care au mulți prieteni în listă, optizând destul de mult consumul de resurse generat pe server.
De exemplu dacă un membru are 100 de prieteni în listă, la apelul funcției vechi se generează 200 de interogări la baza de date, pe când noua funcție generează o singură interogare la baza de date, indiferent de numărul de prieteni din listă.
Funcția originală (adică funcția care vine eliminată din fișierul core.php) are următorul conținut:

###Început cod:
function getonbuds($uid)
{
global$conn;
$counter=0;
$buds=$conn->query('SELECT`uid`,`tid`FROM`lib3rtymrc_buddies`WHERE(`uid`="'.$uid.'"||`tid`="'.$uid.'")&&`agreed`="1"');
while($bud=$buds->fetch_row())
{
if($bud[0]==$uid)
$tid=$bud[1];
else
$tid=$bud[0];
if(isonline($tid))
$counter++;
}
return$counter;
}
###Sfârșit cod.

Funcția care vine pusă în locul celei eliminate are următorul conținut:

###Început cod:
function getonbuds($uid)
{
global$conn;
$prieteni_online=$conn->query('SELECT COUNT(`lib3rtymrc_online`.`userid`)FROM`lib3rtymrc_online`,`lib3rtymrc_buddies`WHERE(`lib3rtymrc_online`.`userid`=`lib3rtymrc_buddies`.`uid`||`lib3rtymrc_online`.`userid`=`lib3rtymrc_buddies`.`tid`)&&(`lib3rtymrc_buddies`.`uid`="'.$uid.'"||`lib3rtymrc_buddies`.`tid`="'.$uid.'")&&`lib3rtymrc_buddies`.`agreed`="1"&&`lib3rtymrc_online`.`userid`!="'.$uid.'"')->fetch_row();
return$prieteni_online[0];
}
###Sfârșit cod.

Un gând despre „Problemă funcție care numără prietenii online, din scripturile Lavalair

Lasă un răspuns