| 
<?
/****************************************************************************************
 *    guaranix Rank                                                                      *
 *                                                                                       *
 *    This is a class that implements the Google Rank algorithm called PageRank.         *
 *    The algorithm is too much effective  for get what Page (or what are you trying     *
 *    to rank) is more important than the others.                                        *
 *                                                                                       *
 *    The whole algorithm with explanation could be found at:                            *
 *    http://dbpubs.stanford.edu:8090/pub/1999-66                                        *
 *                                                                                       *
 *    Becouse the algorithm is not mine (I didn't do the research about this ranking)    *
 *    this source is free                                                                *
 *                                                                                       *
 *                                                                                       *
 ****************************************************************************************/
 
 class gRank
 {
 var $mysql;
 var $table;
 
 var $dump;
 var $sql_limit;  #SQL limit
 
 function gRank()
 {
 $this->dump = 0.85;
 $this->sql_limit = 1000;
 }
 function calculate()
 {
 print "Preparing... ";
 $this->Prepare();
 print "Prepared\n";
 
 print "Calculating the Pagerank with out Danglins\n";
 $this->CalculatePR_WitoutDanglings();
 
 print "Calculating the Pagerank\n";
 $this->CalculatePR();
 $this->FinishPR();
 print "Finish, all the result are in the table PR_FINISHED\n";
 
 
 }
 
 function FinishPR()
 {
 global $sql_finish;
 
 foreach($sql_finish as $Sql)
 mysql_query($Sql,$this->mysql) or die(mysql_error($this->mysql));
 }
 
 function Prepare()
 {
 global $sql;
 
 foreach($sql as $Sql)
 mysql_query($Sql,$this->mysql) or die(mysql_error($this->mysql));
 
 #Now we will calculate formulates it of each page for its PageRank
 for($i=0; ;$i++)
 {
 $main = mysql_query("select id from tmp_pr where formula = '' limit ".$this->sql_limit,$this->mysql) or die(mysql_error($this->mysql));
 if (mysql_num_rows($main) == 0) break;
 
 while ($row = mysql_fetch_array($main))
 {
 $Sql = "select pagerank.master, tmp_pr.nroout from pagerank inner
 join tmp_pr on (tmp_pr.id = pagerank.master) where pagerank.slave = ".$row['id'];
 
 $xSql = mysql_query($Sql, $this->mysql) or die(mysql_error( $this->mysql));
 $formula = "";
 
 while ($row1 = mysql_fetch_array($xSql))
 {
 $formula .= "PR(".$row1['master'].")/".$row1['nroout']." + ";
 }
 $formula = substr($formula,0,strlen($formula) - 2);
 $formula = mysql_escape_string($formula);
 mysql_free_result($xSql);
 $Sql = "update tmp_pr set formula = '".$formula."' where id = ".$row['id'];
 
 mysql_query($Sql,$this->mysql) or die(mysql_error($this->mysql));
 }
 }
 }
 
 function CalculatePR_WitoutDanglings()
 {
 for ($i=0; $i < 52; $i++)
 {
 print "\tItineracion $i\n";
 for ($e = 0; ; $e++)
 {
 if ($this->InternalPRcalculator($e,false) == false)
 break;
 }
 }
 }
 
 function CalculatePR()
 {
 for ($e = 0; ; $e++)
 {
 if ($this->InternalPRcalculator($e) == false)
 break;
 }
 }
 
 function InternalPRcalculator($Start, $dangling = true)
 {
 global $buff;
 $start = $Start * $this->sql_limit;
 $where = "";
 if (!$dangling)
 {
 $where = "where nroout != 0";
 }
 
 $sql = mysql_query("select id, formula from tmp_pr $where limit $start, ".$this->sql_limit,$this->mysql) or die(mysql_error($this->mysql));
 
 if (mysql_num_rows($sql) == 0)
 return false;
 while ($row = mysql_fetch_array($sql))
 {
 eval('$nro = (float)'.$row['formula'].';');
 $nro = (float)(1 - $this->dump) + $this->dump * ($nro);
 mysql_query("update tmp_pr set pr = '$nro' where id = ".$row['id']);
 $buff[$row['id']] = $nro;
 }
 return true;
 }
 }
 
 /*
 *    This function will calcula the PR of a given page.
 */
 function PR($i)
 {
 global $buff; #This is the memory buffer
 
 if (!isset($buff[$i]))
 {
 $sql1 = mysql_query("select pr from tmp_pr where id = $i");
 $row = mysql_fetch_array($sql1);
 mysql_free_result($sql1);
 $buff[$i] = $row[0];
 }
 return $buff[$i];
 }
 
 
 ?>
 |