【问题标题】:Finding the most popular articles based on user "likes" and "dislikes"根据用户“喜欢”和“不喜欢”查找最受欢迎的文章
【发布时间】:2018-03-21 15:55:04
【问题描述】:

用户可以添加其他用户可以“喜欢”或“不喜欢”的文章。

我需要找到最受欢迎的文章,计算方法是喜欢减去不喜欢。例如,如果一篇文章有​​ 3 个喜欢和 1 个不喜欢,那么它应该被赋予 2 的流行度值。

这是我的数据库结构,我将它们连接在一起:

我的文章表:

id | user_id | title | description | views | created_at | updated_at

我的喜欢表:

id | user_id | article_id | like_type | created_at | updated_at

如何找到最受欢迎的文章?

【问题讨论】:

  • 到目前为止你尝试过什么?您知道如何使用普通的 MySQL 查询来编写它吗?
  • 喜欢的类型是布尔值吗?这是什么?
  • @RossWilson 不,我没有
  • 要回答这样的问题,您需要为每个表提供一些示例行,以及您需要的结果示例。请edit您的问题。

标签: php mysql laravel


【解决方案1】:

您可以使用简单的 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 语句。

【讨论】:

  • yessss 它的工作原理:D 但你能向我解释一下什么是原始的和分组的
  • 我不明白这个 DB::Raw('SUM( 2 * likes.like -1))
  • Raw - 让您在 laravel 查询构建中编写 raw sql。 2*likes.like-1 是我的转 [0,1] -> [-1,1] 的方式,所以在求和时,喜欢会加一,不喜欢会减一。
  • 你能帮我解决这个问题吗?现在可以订购了stackoverflow.com/questions/46265415/…
猜你喜欢
  • 2016-03-10
  • 2017-09-06
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多