function batchkeep() { global $feedids; // get list of feeds feedarray(); foreach ($feedids as $fidst) { //first need to findout date for last melife for this id // this use melife and says if 25% above current lifestyle average feed can say, if not put of later list $db->query = "SELECT * FROM " . RSSDATA . ".melife WHERE " . RSSDATA . ".melife.feed_id = {$fidst} ORDER BY " . RSSDATA . ".melife.date DESC LIMIT 1"; $resultstaydate = mysql_query($db->query) or die(mysql_error()); if (mysql_num_rows($resultstaydate) == 1) { $rowdate = mysql_fetch_object($resultstaydate); $datestay = $rowdate->date; } // this use melife and says if 25% above current lifestyle average feed can say, if not put of later list $db->query = "SELECT * FROM " . RSSDATA . ".melife WHERE " . RSSDATA . ".melife.feed_id = {$fidst} AND date = {$datestay} AND diffavg > 25"; echo $db->query; $resultstay = mysql_query($db->query) or die(mysql_error()); if (mysql_num_rows($resultstay) > 0) { // then flag feed as a 1 $db->query = "UPDATE " . RSSDATA . ".feedlinking SET " . RSSDATA . ".feedlinking.liveflag = 1 WHERE " . RSSDATA . ".feedlinking.liveflag = '{$fidst}' "; } else { // flag as not to be included 0 $db->query = "UPDATE " . RSSDATA . ".feedlinking SET " . RSSDATA . ".feedlinking.liveflag = 0 WHERE " . RSSDATA . ".feedlinking.liveflag = '{$fidst}' "; } } // closes foreach }
function feeditems() { global $feedids; global $feeditems; global $lifeobjects; global $meavgnewstats; global $scoredate; $scoredate = time(); feedarray(); $feedsize = count($feedids); // need to look at number of feeds needing processed and if over 400 batch $batch = 100; if ($feedsize / $batch < 1) { $nochunks = 0; } else { $nochunks = ceil($feedsize / $batch); //$nochunks = 0; //echo $nochunks; } $batchchunk = array_chunk($feedids, $batch, true); //print_r($batchchunk); $feeditems = array(); lifestylestartarray(); for ($x = 0; $x <= $nochunks; $x++) { //echo $x; //echo '<br /><br />'; //print_r($batchchunk[$x]); $meavgnewstats = ''; foreach ($batchchunk[$x] as $fed) { //echo $fed.'fed'; foreach ($lifeobjects as $def) { // could LEFT JOIN scores and then use memory to do sum need to test. $db->query = "SELECT " . RSSDATA . ".items.id, " . RSSDATA . ".lifestylelightscorea.lifestyleid, " . RSSDATA . ".lifestylelightscorea.score50, " . RSSDATA . ".lifestylelightscorea.lifestyleid, " . RSSDATA . ".lifestylelightscorea.matched1 FROM " . RSSDATA . ".items LEFT JOIN " . RSSDATA . ".lifestylelightscorea ON " . RSSDATA . ".lifestylelightscorea.itemid = items.id WHERE " . RSSDATA . ".items.feed_id = '{$fed} ' AND " . RSSDATA . ".lifestylelightscorea.lifestyleid = {$def} "; //echo $db->query; $resultfeditem = mysql_query($db->query) or die("Error in query: {$db->query}. " . mysql_error()); if (mysql_num_rows($resultfeditem) > 0) { while ($row = mysql_fetch_object($resultfeditem)) { $feeditems[$fed][$def][0][] = $row->score50; $feeditems[$fed][$def][1][] = $row->matched1; } } // put calculatation of stats in here??? statcalulator($fed, $def, $feeditems); } // closes foreach lifestyle loop } // closes foreach feed loop //print_r($feeditems); $meavgnewstats = substr($meavgnewstats, 0, strLen($meavgnewstats) - 2); //this will eat the last comma //echo $meavgnewstats; $db->query = "INSERT INTO " . RSSDATA . ".lifestylelightstats (feed_id, idlifestart, noposts, scoposts, lifestylescore, topmatch, avgscore, scoreratio, scoredate) VALUES "; $db->query .= $meavgnewstats; //echo $db->query; $resultinsertavg = mysql_query($db->query) or die(mysql_error()); } // closes for chunkloop }
function melifecal() { global $feedids; global $lifeobjects; global $avgofavg; $normdate = time(); // need array of lastest averages avgofavg(); //start feedlist feedarray(); // defintion list lifestylestartarray(); $feedsize = count($feedids); // need to look at number of feeds needing processed and if over 400 batch $batch = 100; if ($feedsize / $batch < 1) { $nochunks = 0; } else { $nochunks = ceil($feedsize / $batch); //$nochunks = 0; //echo $nochunks; } $batchchunk = array_chunk($feedids, $batch, true); //print_r($batchchunk); for ($x = 0; $x <= $nochunks; $x++) { $melife = ''; foreach ($batchchunk[$x] as $fed) { foreach ($lifeobjects as $def) { // need topword match data (added to me avg stats table) // need latest mestats foreach feed $db->query = "SELECT * FROM " . RSSDATA . ".lifestylelightstats WHERE " . RSSDATA . ".lifestylelightstats.feed_id = {$fed} AND " . RSSDATA . ".lifestylelightstats.idlifestart = {$def} ORDER BY " . RSSDATA . ".lifestylelightstats.scoredate DESC LIMIT 1 "; //echo $db->query; $resultstatarr = mysql_query($db->query) or die(mysql_error()); if (mysql_num_rows($resultstatarr) > 0) { while ($row = mysql_fetch_object($resultstatarr)) { // need to create new difference distance as % from data and save to db. // need to do sums on avgavg array and stats avg array if (isset($row->avgscore) == true && $row->avgscore > 0) { $diffpercent = ($row->avgscore - $avgofavg[$def][1]) / $avgofavg[$def][1] * 100; $diffpercent = round($diffpercent, 2); } else { $diffpercent = -1; } //$row->topmatch = '16'; $melife .= "('{$fed}', '{$def}', '{$row->topmatch}', '{$diffpercent}', {$normdate}), "; } } } // closes defin. loop } // closes feed loop //print_r($avgstats); $melife = substr($melife, 0, strLen($melife) - 2); //this will eat the last comma //echo $melife; $db->query = "INSERT INTO " . RSSDATA . ".melife (feed_id, idlifestart, topmatch, diffavg, date) VALUES "; $db->query .= "{$melife}"; //echo $db->query; $resultmelife = mysql_query($db->query) or die(mysql_error()); } // closes for loop setmelifedate($normdate); }
function memenu($meurlfeedid) { global $lifeobjects; global $feedids; global $lifequalify; lifestylestartarray(); feedarray(); // select lifestyle that an individual qualify for and build array // form two arrays of ranks based on top score and distance from average, merge out rankings and that will be order menu list will be, limit to 5 and suggested add more button. NB need to remove lifestyle presented to edit add, remove, order too I suppose. $fid = $meurlfeedid; //echo $fid; // need to find out date of latest me avarage data $db->query = "SELECT * FROM " . RSSDATA . ".melife WHERE " . RSSDATA . ".melife.feed_id = {$fid} ORDER BY " . RSSDATA . ".melife.date DESC LIMIT 1 "; //echo $db->query; $resultldate = mysql_query($db->query) or die(mysql_error()); if (mysql_num_rows($resultldate) == 1) { $rowldate = mysql_fetch_object($resultldate); $ldate = $rowldate->date; } $db->query = "SELECT * FROM " . RSSDATA . ".melife WHERE " . RSSDATA . ".melife.feed_id = {$fid} AND " . RSSDATA . ".melife.date = {$ldate} ORDER BY " . RSSDATA . ".melife.topmatch DESC "; //echo $db->query; $resulttopm = mysql_query($db->query) or die(mysql_error()); if (mysql_num_rows($resulttopm) > 0) { while ($rowtop = mysql_fetch_object($resulttopm)) { $toprank[] = $rowtop->idlifestart; } } $db->query = "SELECT * FROM " . RSSDATA . ".melife WHERE " . RSSDATA . ".melife.feed_id = {$fid} AND " . RSSDATA . ".melife.date = {$ldate} ORDER BY " . RSSDATA . ".melife.diffavg DESC "; //echo $db->query; $resultdiffavg = mysql_query($db->query) or die(mysql_error()); if (mysql_num_rows($resultdiffavg) > 0) { while ($rowdif = mysql_fetch_object($resultdiffavg)) { $topdif[] = $rowdif->idlifestart; } } if ($toprank && $topdif) { //print_r($toprank); //print_r($topdif); $rankone = array_intersect($toprank, $lifeobjects); $rankonea = array_flip($rankone); //print_r($rankonea); $ranktwo = array_intersect($topdif, $lifeobjects); $ranktwoa = array_flip($ranktwo); //print_r($ranktwoa); foreach ($lifeobjects as $key => $obj) { $memrank = ($rankonea[$obj] + $ranktwoa[$obj]) / 2; //echo $memrank; $lifequalify[$key] = $memrank; //$lifequalify[$obj][] = $key; } $lifesort = asort($lifequalify); //print_r($lifesort); //print_r($lifequalify); $_SESSION[lifequalify] = $lifequalify; } return $lifequalify; }
function indivmostlikeme($feedid) { global $feedids; global $peergroup; global $meuqni; global $melifeavglist; global $perfeed; // NEED TO SETUP UPFRONT LOGIC IS BATCH OR REFRESH FOR PARTICUALR INDIVIDUAL? // what is feed id of this individual //$feedindv = 2; // need to GET_(feed_id) or something $date = time(); // need list of all feeds feedarray(); //$feedids = Array ( '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10', '11' => '11', '12' => '12', '13' => '13', '14' => '14', '15' => '15', '16' => '16', '17' => '17', '18' => '18', '19' => '19', '20' => '20');//, '21' => '21', '22' => '23', '23' => '24', '24' => '25', '25' => '26', '26' => '27', '27' => '28', '29' => '29', '30' => '31', '31' => '31', '32' => '32', '33' => '33', '34' => '34', '35' => '35', '36' => '36', '37' => '37', '38' => '38', '39' => '39', '40' => '40'); //print_r($feedids); //prepmelife ($feedids); $lifelisttop = toplifefivearray($feedid); //print_r($lifelisttop); // call melifedata array with list of feed ids mepath needs data on //how many individual, count feedarray $indpeers = count($feedids); //echo $indpeers.'nofeeds<br />'; //80-20 rule $peertwenty = $indpeers * 0.1; //echo $peertwenty.'20% feeds<br />'; // batch per lifestlyeid save memory getting over maxed foreach ($lifelisttop as $unid) { $perdiffarr = ''; $newadf = 1; $perdiffarr = melifearray($unid, $newadf, $feedid); //print_r($melifeavglist); //print_r($perdiffarr); //echo 'break<br /><br />'; // now look up the individuals melife stat and then order all indivials stas and then use 80-20 rules, ie take20% of indivudals clostest to that individual. Then display results, have any post been published from this peergroup of in the last 24hrs? // new list of feeds that have lifestyle in top5 $perfeed; //foreach ($feedids as $fma) { //foreach ($perfeed[$unid] as $pfma) { $steps = ''; // form an array for all the lifestyleids, count no. feeds find out 20% of that number, find out individuals average then identify feeds 10% plus this indivudals avarage and -10% from their average //print_r($melifeavglist[$mell]); $mecou = count($perdiffarr[$unid]); //echo $mecou; if ($mecou > 0) { //gives us array containing the individuals average // next need to find -10 and +10% either side of that position // now need to count back and forward along the array to pick out peer list. $steps = new Steps(); $poslist = array(); foreach ($perdiffarr[$unid] as $key => $reindex) { $steps->add($key); } //echo 'listorder'; //print_r($steps->all); $feedindv = $feedid; //echo 'indiv feedid'.$feedindv.'<br /><br />'; // set this individuals avg. position $steps->setCurrent($feedindv); //print_r($steps); for ($i = 1; $i <= $peertwenty; $i++) { //echo $i; //echo $steps->getNext().'<br>'; $newset = $steps->getNext(); //echo $newset.'newno<br /><br >'; $indivset = $steps->setCurrent($newset); //echo $indivset.'indvid set'; if (strlen($newset) > 0) { $poslist[] = $newset; } } //print_r($poslist); $steps->setCurrent($feedindv); for ($i = 1; $i <= $peertwenty; $i++) { //echo $i; //echo $steps->getPrev().'<br>'; $newset = $steps->getPrev(); $indivset = $steps->setCurrent($newset); if (strlen($newset) > 0) { $poslist[] = $newset; } } //echo 'postlist'; //print_r($poslist); //echo 'postlist'; $arraycou = count($poslist); //echo $arraycou.'numcou'; // save to perpeers table to have on demand quickly and update on a per individual basis if ($arraycou > 0) { //print_r($poslist); //echo 'heelo'; $peerinslist = ''; $rank = ''; foreach ($poslist as $peerid) { $rank++; $peerinslist .= "('{$feedid}', '{$rank}', '{$date}', '{$unid}', '{$peerid}' ), "; } $peerinslist = substr($peerinslist, 0, strLen($peerinslist) - 2); //this will eat the last comma //echo $peerinslist.'insertcode'; if (strLen($peerinslist) > 0) { $db->query = " INSERT INTO " . RSSDATA . ".perpeers (feedid, rank, date, idlifestart, peerid) VALUES "; $db->query .= $peerinslist; //echo $db->query; $resultinsqual = mysql_query($db->query) or die(mysql_error()); } //closes if } // closes if anything to insert } // closes if no melifedata //} // closes foreach loop ie eachfeed. } // closes for each unqiue lifestyle definition }
<br /> <form method="post" action=" <?php echo $_SERVER['PHP_SELF']; ?> " > Find out top 5 lifestyles for each individual ie. feed <input type="Submit" name="melifetopfive" value="Find out top 5 lifestyles all feeds"><br><br> </form> <br /> <br /> <?php if (isset($_POST['melifetopfive'])) { error_reporting(5); $date = time(); feedarray(); standardtopmenutwo(); foreach ($feedids as $efid) { $lifequalify = ''; $topmenu = array(); $rank = ''; memenu($efid); compareusermenutwo($lifemenu, $lifequalify); $db->query = " INSERT INTO " . RSSDATA . ".toplife (feedid, rank, date, lifestyleid) VALUES "; foreach ($topmenu as $tpf) { $rank++; $db->query .= "('{$efid}', '{$rank}', '{$date}', '{$tpf}'), "; } $db->query = substr($db->query, 0, strLen($db->query) - 2); //this will eat the last comma $resultmelifet = mysql_query($db->query) or die(mysql_error());