标签:tle sar size 开始 搜索 自己 func 16px blog
最近在写文章的管理, 发现网上关于 "相关文章推荐" 的资料比较少, 于是自己写了一个, 初稿, 代码未经优化, 实现搜索相同(相似)标签的文章, 比如搜索 "深入" 也是可以搜到"深入浅出"的.
如果是多个标签, 本文会(遍历标签)每次只对一个标签进行搜索, 达到两条数据即返回.
如有更好的搜索方法, 欢迎共同讨论
相关文章 标签相关, 剔除本身的id
本人比较随意, 写的文章比较丑, 大家别太在意
/** * * @param 标签 $label * @param 文章ID $article_id * @return 文章相关字段 */ public function getRelated($label,$article_id) { //传入的标签数量 $num = count($label); //多个标签 开始 if($num>1) { $Article = array(); for($i=0;$i<$num;$i++) { $arr = Article::find() ->select([‘article_id‘,‘title‘,‘summary‘,‘create_time‘]) ->where([‘status‘=>1]) ->andwhere([‘<>‘,‘article_id‘,$article_id]) ->andwhere([ ‘or‘, [‘like‘,‘label‘,$label[$i]], ]) ->asArray(true) ->orderBy(‘create_time desc‘) ->limit(2) ->all(); $Article = array_merge($Article,$arr); $num1 = count($Article); if($num1 > 1) { return $Article; } } //如果查到的文章不足两篇, 就随便去一篇最新的补上, if(count($Article)<2) { $Article2 = Article::find() ->select([‘article_id‘,‘title‘,‘summary‘,‘create_time‘]) ->where([‘status‘=>1]) ->andwhere([‘<>‘,‘article_id‘,$article_id]) ->asArray(true) ->orderBy(‘create_time desc‘) ->limit(2) ->all(); $Article = array_merge($Article,$Article2); $Article = array_slice($Article,0,2); return $Article; } return $Article; } //多个标签 结束 //如果只有一个标签, 从这里开始,到最后结束 $Article1 = Article::find() ->select([‘article_id‘,‘title‘,‘summary‘,‘create_time‘]) ->where([‘status‘=>1]) ->andwhere([‘<>‘,‘article_id‘,$article_id]) ->andwhere([ ‘or‘, [‘like‘,‘label‘,$label], ]) ->asArray(true) ->orderBy(‘create_time desc‘) ->limit(2) ->all(); //如果查到的文章不足两篇, 就随便去一篇最新的补上, //这里重复了, 可以自己优化一下 if(count($Article1)<2) { $Article2 = Article::find() ->select([‘article_id‘,‘title‘,‘summary‘,‘create_time‘]) ->where([‘status‘=>1]) ->andwhere([‘<>‘,‘article_id‘,$article_id]) ->asArray(true) ->orderBy(‘create_time desc‘) ->limit(2) ->all(); $Article = array_merge($Article1,$Article2); $Article = array_slice($Article,0,2); return $Article; } return $Article1; }
标签:tle sar size 开始 搜索 自己 func 16px blog
原文地址:http://www.cnblogs.com/lz0925/p/7493393.html