【问题标题】:Join two tables and add the data with the same column id加入两个表并添加具有相同列 id 的数据
【发布时间】:2015-07-04 10:42:28
【问题描述】:

我正在使用 Laravel 4.2
我有两张表“问题”和“投票”
在我的问题表中,我有类似的列

  • id,
  • id_user,
  • subject,
  • body

在我的投票表中,我有类似

的列
  • id,
  • id_question,
  • id_user,
  • likes,
  • dislikes

用户只能投票一次,因此每个用户的喜欢和不喜欢的值是 0-1,id_question 具有问题表中问题的id。现在你想根据每个问题的投票数对问题进行降序排序。

我如何对投票进行汇总和排序。这是我尝试过的,但它只显示第一个问题的计数

$questions=Question::leftJoin('votes', 'questions.id', '=', 'votes.id_question')
            ->groupBy('questions.id')->sum('likes');

            return json_encode($questions);

得到计数后,我可以使用orderBy('likes','DESC')->get(); 对它们进行降序排序 但是如何获得喜欢的总和?

【问题讨论】:

  • 附带说明,我认为您可能希望在问题表中创建一个like_counter 列,以保留当前的喜欢和不喜欢的总数。这是一种非规范化,但随着数据库的增长可能会快得多。
  • ->sum('likes')之后添加->get();
  • 给我以下错误“在非对象上调用成员函数 get()”@evans_murithi
  • 如果我添加like_counter@CatoMinor 列,我将不得不进行如此多的更改
  • 试试这个$questions=Question::leftJoin('votes', 'questions.id', '=', 'votes.id_question')->sum('likes')->get();,不带group by,看看它是否返回一些东西

标签: php mysql database laravel eloquent


【解决方案1】:

试试这个:

$questions=Question::leftJoin('votes', 'questions.id', '=', 'votes.id_question')
    ->select(DB::raw('questions.id, SUM(votes.likes) as likes'))
    ->groupBy('questions.id'‌​)
    ->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多