使用laravel从两个表中进行比较和计数

时间:2017-04-13 10:33:37

标签: sql laravel

id  sm_id  to_id
1   3      2
2   4      1
3   3      3
4   3      2
5   3      3
6   4      1

如何计算to_idsm_id的出现次数?

我有两个输入,第一个sm_id和第二个to_id,我想根据输入计算值的出现。

sm_id = 4 and to_id = 1的预期结果为2

这是我试过的代码

$us = \DB::table('mgs')
                 ->where('sm_id', '=', DB::raw('to_id'))
        ->where('to_id', '=', DB::raw('sm_id'))
                 ->groupBy('sm_id')
                 ->count();

      print_r($us);die;

3 个答案:

答案 0 :(得分:2)

如果您想计算表格中给定sm_idto_id的消息数量,请执行以下操作:

\DB::table('msg')->where('sm_id', $smId)->where('to_id', $toId)->count();

答案 1 :(得分:0)

试试这个:

$us = \DB::table('mgs')
            ->where('sm_id', '=', DB::raw('to_id'))
            ->where('to_id', '=', DB::raw('sm_id'))
            ->groupBy('sm_id', 'to_id')
            ->count('sm_id', 'to_id');

print_r($us);die;

答案 2 :(得分:-1)

如果您有$sm_id$to_id作为输入,那么您在使用DB::raw时不需要使用Laravel query builder,因此它会处理 SQL注射

$us = \DB::table('mgs')->where(['sm_id'=>$sm_id,'to_id'=>$to_id])->count();
dd($us);

dd()是laravel的方法,代表转储和死亡,因此您无需单独使用print_rdie

PS。我已经使用了您脚本中的\DB,但我建议您使用:Illuminate\Support\Facades\DB