首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据常用标签对相关文章进行排序?

问如何根据常用标签对相关文章进行排序?
EN

Stack Overflow用户
提问于 2019-06-10 19:40:47
回答 1查看 127关注 0票数 2

我有一个文章和标签表。每篇文章都可以有多个标签。我想获取一篇文章的相关文章,并根据常见的标签对结果进行排序。

代码语言:javascript
复制
// Tag Model
class Tag extends Model
{
    public function posts()
    {
        return $this->morphedByMany(Article::class, 'taggable');
    }
}
// Article Model
class Article extends Model
{
    public function tags()
    {
        return $this->morphToMany(Tag::class, 'taggable');
    }
}

我使用此代码来获取相关文章,但我不知道如何根据更常见的标签对结果进行排序。

代码语言:javascript
复制
// And i 
$relatedArticle = Article::whereHas('tags', function($query) use ($article){
    $query->whereIn('name', $article->tags->pluck('name'));
})->where('id', '!=', $article->id)->take(10)->get();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-11 07:32:15

在SQL中,您需要的信息将通过如下方式检索(我不知道关联表的名称,也不知道外键和主键,因此如果需要,请更改它):

代码语言:javascript
复制
SELECT articles.*, 
(
    SELECT COUNT(tags.id)
    FROM tags 
    JOIN articles_tags at ON tags.id = at.tag_id
    WHERE tags.name in ('A', 'B', 'C') /* acquired from $article->tags->pluck('name') */
    AND at.article_id = a.id
) as tags_in_common
FROM articles a 
WHERE articles.id != {$id} 
AND tags_in_common >= 1
ORDER BY tags_in_common DESC
LIMIT 10;

现在,使用queryBuilder,我们必须弄得有点脏,但它可能看起来像这样:

代码语言:javascript
复制
//Fetches pairs: [article_id, numberInCommon]
$tagsInCommon = DB::table('tags')
    join('articles_tags', 'tags.id', '=', 'articles_tags.tag_id')
    ->select('articles_tags.article_id', DB::raw('COUNT(*) as numberInCommon'))
    ->whereIn('tags.name', $article->tags->pluck('name'))
    ->groupBy('articles_tags.article_id')

$relatedArticle = Article::
    ->joinSub($tagsInCommon, 'tags_in_common', function($join){
        $join->on('id', '=', 'tags_in_common.article_id')
    })
    ->where('id', '!=', $article->id)
    ->orderBy('tags_in_common.numberInCommon', 'desc')
    ->take(10)
    ->get();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56525691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档