用户可以添加其他用户可以"喜欢"的文章。或者"不喜欢"。
我需要找到最受欢迎的文章,计算为喜欢减去不喜欢。例如,如果一篇文章有3个喜欢而且1个不喜欢,那么它应该被赋予2的流行度值。
这是我的数据库结构,我将它们连接在一起:
我的文章表:
id | user_id | title | description | views | created_at | updated_at
我喜欢的表:
id | user_id | article_id | like_type | created_at | updated_at
如何找到最受欢迎的文章?
答案 0 :(得分:0)
你可以用一个简单的group by和order语句实现你所要求的东西,这样的东西应该有效:
return Article::select('title', DB::Raw('SUM(2*likes.like_type-1) as likes_count'))
->leftJoin('likes', 'likes.article_id', '=', 'articles.id')
->groupBy('articles.id')
->orderBy('likes_count', 'DESC')
->get();
我认为like_type是一个布尔表示0表示不喜欢或1表示喜欢 - 如果不是,则需要更改SUM语句。