要實現的功能是根據用戶購買過得商品進行推薦(猜你喜歡)
數據庫結構:標籤表label,商品標籤關聯表goods_label,商品表goods,商品sku表goods_sku,訂單表order,訂單商品快照表order_goods
實現原理:根據購買過商品的標籤,爲用戶推薦商品
活很少說,上代碼:算法
$memberid=$member->checktoken($param['token']); $orderlist = $order->getorder(array('member_id'=>$memberid)); $list = array(); foreach ($orderlist as $value1) { $ordergoods = $order->getordergoods($value1['ordernumber']); foreach ($ordergoods as $value) { $labellist = array(); $label_id = $that->labegoodsinfo(array('goods_id'=>$value['goods_id'])); $labellist = explode(',', $label_id); $list = array_merge($list,$labellist); $list = array_unique($list); //$list即爲用戶購買過的商品標籤 //格式:$list=array(0=>1,1=>3,2=>5,3=>4); } } $label_goods = $that->getgoodslabel(); foreach ($label_goods as $k=>$value) { $goods_labelid = explode(',', $value['label_id']); $label_goods[$k]['count'] = count(array_intersect($goods_labelid,$list)); if($label_goods[$k]['count'] == 0){ unset($label_goods[$k]); } } //$label_goods是符合$list標籤的商品以及count是符合的標籤個數 //格式:$label_goods=array(0=>array('label_id'=>1,3,6,'goodsid'=>1,'count'=>2), // 1=>array('label_id'=>1,3,5,'goodsid'=>2,'count'=>3) // ) $sort = array( 'direction' => 'SORT_DESC', //排序順序標誌 SORT_DESC 降序;SORT_ASC 升序 'field' => 'count', //排序字段 ); $arrSort = array(); foreach($label_goods AS $uniqid => $row){ foreach($row AS $key=>$value){ $arrSort[$key][$uniqid] = $value; } } if($sort['direction']){ array_multisort($arrSort[$sort['field']],constant($sort['direction']),$label_goods); } //$label_goods從新排序,按照符合標籤數由多到少排序 //格式:$label_goods=array(0=>array('label_id'=>1,3,5,'goodsid'=>2,'count'=>3), // 1=>array('label_id'=>1,3,6,'goodsid'=>1,'count'=>2) // )
最後只要根據goodsid去查詢出相關商品的信息便可。
沒有用到權重等相關算法,歡迎你們多提意見,讓我更好的進步!
愛你喲~數據庫