Eloquent查询 - 多列上的COUNT和SUM

时间:2015-01-01 12:28:50

标签: php mysql sql laravel eloquent

我正在尝试使用这个问题的知识 question already answered

在我的数据透视表中 user_attitudes 我有两列:

  • 重要性(用户声明他们的兴趣(0,3))

  • 态度(基本上这个是用于上升和下调,值是'-1','0'和'1')

我现在拥有的:

我可以打印由 selectRaw 创建的值排序的实体列表。

我需要什么:

我希望打印下面描述的不同的所有四个值,无视哪个值用于排序

我希望使用AJAX创建多个排序开关,以便用户可以更改排序。

我需要输出最多四个计数: 总重要性得分:

SUM(user_attitudes.importance) AS importance

显示观察实体的用户数:

COUNT(user_attitudes.importance) AS observing

upvotes和downvotes的总数:

SUM(user_attitudes.attitude) AS karma

下调或上调iven实体的用户数量:

COUNT(user_attitudes.importance) AS 

如何扩展以下查询? 在这个查询中,我可以要求上面的额外数字?

$rank_entities = Entity::leftJoin('user_attitudes', function($q){
                $q->on('entity_id', '=', 'entities.id');
                $q->where('item_type', '=', 'entity');
            })
            ->selectRaw('entities.*, SUM(user_attitudes.importance) AS importance')
            ->groupBy('entities.id')
            ->orderBy('importance', 'desc')
            ->take(6)
            ->get(); 

我尝试添加另一个

->selectRaw('entities.*, SUM(user_attitudes.attitude) AS karma')

但似乎只有一个selectRaw可以创建一个可打印的变量 有任何想法吗? THX。

1 个答案:

答案 0 :(得分:3)

只需将它们添加到当前selectRaw即可?在这里,我使用数组使其更清洁:

$selects = array(
    'entities.*',
    'SUM(user_attitudes.importance) AS importance',
    'COUNT(user_attitudes.importance) AS observing',
    'SUM(user_attitudes.attitude) AS karma'
);

// query ...

->selectRaw(implode(',', $selects))