【发布时间】:2014-06-01 13:40:05
【问题描述】:
我想在我管理的一个项目中开发一项新功能。这将是左侧和底部面板的类似文章列表。该项目是在 Laravel 中开发的。
当用户查看一篇文章时,底部和左侧面板中会显示一些相似的文章,当前按查看次数排序,它们与当前查看的文章来自同一类别。
我们希望根据这个原则对类似文章进行更精确的文章挑选:
编辑者可以在管理中创建一个标签,并为标签分配一个数值(权重)。可以为一篇文章分配多个标签。
这里有多对多关系,在文章和标签表之间(带有数据透视表)。
当用户查看特定文章时,我想编写一个查询以根据标签关联及其权重来选择相似的文章。
例如,当我们有一个标签 Home,重量为 20,Furniture 为 15,Kids 为 10 等。查询获取当前文章的标签并开始将它们与其他文章标签进行比较,并根据总和对它们进行排序标签权重。
例子:
Article A : Home 20, Furniture 15, Garden 10
Article B : Garden 10, Home 20, Kids 5
Article C : Garden 10, Kids 5
Article D : Furniture 15, Kids 5
我们正在查看文章 B,我们与其他文章具有相同的标签关联:
Article A: Home 20 -> Weight score: 20
Article C: Garden 10, Kids 5 -> Weight score: 15
Article D: Kids 5 -> Weight score: 5
然后这些文章按分数降序排列,并按此顺序显示在左栏中。
由于到目前为止我只使用 Eloquent,所以我无法将我的头脑围绕可以执行此操作的原始 sql 查询。或任何其他 Eloquent 方式。
有人知道这是否可以通过 Eloquent 方式完成,使用一点原始 sql,还是完全原始 sql?
我知道这个查询很复杂,所以我会将它存储在 Redis 缓存中一个小时。谢谢你的回答。
【问题讨论】:
标签: php mysql sql laravel tags