<?php$listingBuckets=getFromRedisCache("listing_days_and_ids");// OR$listingBuckets=query("SELECT * FROM listing_days_and_ids WHERE day > NOW() - INTERVAL 45 DAY");/** * We'd want to get these buckets and format them such that they fit this structure * * [ * 2016-09-26 -> [ * id -> 1, * listing_id_min -> 1 * listing_id_max -> 98 * ], * 2016-09-27 -> [ * id -> 2, * listing_id_min -> 101, * listing_id_max -> 205 * ] * 2016-09-28 -> [ * id -> 3, * listing_id_min -> 211, * listing_id_max -> 334 * ] * ] * * Something like * * $result = []; * foreach (listingDays as d) { * $result[d["day"] = d; * } */foreach($resobj->resultsas$val){$listingBucketsChanged=false;if($val->date){// If we have a new date to work with...if(in_array($val->date,$listingBuckets)&&isLessThan45DaysOld($val->date)){minId=$listingBuckets[$val->date]["listing_id_min"];maxId=$listingBuckets[$val->date]["listing_id_max"];// If this is a new max id for this day, insert itif($val->id>$maxId){minIdNextDay=$listingBuckets[$val->date+1]["listing_id_min"];if($val->id<minIdNextDay){query("INSERT INTO listing_days_and_ids (listing_id_max) VALUES ({$val->id}) WHERE day = ${$val->date} ");$listingBuckets[$val->date]["listing_id_min"]=$val->id;$listingBucketsChanged=true;}}elseif($val->id<$minId){// If this is a new min id for this day, insert itquery("INSERT INTO listing_days_and_ids (listing_id_min) VALUES ({$val->id}) WHERE day = ${$val->date} ");$listingBuckets[$val->date]["listing_id_max"]=$val->id;$listingBucketsChanged=true;}}else{// Add this new date, setting the min_id and max_id as this $val's IDquery("INSERT INTO listing_days_and_ids (day, listing_id_min, listing_id_max) VALUES ({$val->date}, {$val->id}, {$val->id}) ");$listingBuckets[$val->date]=["listing_id_min"=>$val->id,"listing_id_max"=>$val->id];$listingBucketsChanged=true;}}else{$val->date=getListingDateByIdRange($val,$listingBuckets);}if($listingBucketsChanged){cacheInRedis($listingBuckets);}}
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.