我想添加多个属于不同表的查询的计数结果。 我将以下问题用作实际问题的参考,因为该问题已经有解决方案(How do I add two count(*) results together on two different tables?),但是在laravel中实施该解决方案时遇到了问题。
我有两个桌子:玩具和游戏。
+--------------------+------------------+
| Field | Type |
+--------------------+------------------+
| toy_id | int(10) unsigned |
| little_kid_id | int(10) unsigned |
+--------------------+------------------+
+--------------------+------------------+
| Field | Type |
+--------------------+------------------+
| game_id | int(10) unsigned |
| little_kid_id | int(10) unsigned |
+--------------------+------------------+
一个小孩可以有多个玩具。一个小孩可以一次参加多个游戏。
我想要一个查询,该查询将为我提供little_kid涉及的玩具和游戏的总数。
基本上,我想要这两个查询的总和:
SELECT COUNT(*) FROM Toys WHERE little_kid_id = 900;
SELECT COUNT(*) from Games WHERE little_kid_id = 900
以上问题具有以下公认的答案
SELECT
(SELECT COUNT(*) FROM Toys WHERE little_kid_id = 900)+
(SELECT COUNT(*) from Games WHERE little_kid_id = 900)
AS SumCount
我想在Laravel中实现上述解决方案。
我尝试了以下方法,但无济于事。它给出语法错误。
$sub=DB::tabel('toys')->select(DB::raw('count(*) as total'))
->where('little_kid_id',$id);
$sub1=DB::tabel('games')->select(DB::raw('count(*) as total'))
->where('little_kid_id',$id);
$result = DB::table( DB::raw("( ({$sub->toSql()})+({$sub1->toSql()}) ) as
total_count") )
->mergeBindings($sub)
->mergeBindings($sub1)
->select('total_count.total')
->get();
我也尝试过这种方法。它可以工作,但是可以收集,但是我需要一个总计数的整数值
$result=$sub->unionAll($sub1);
dd($result->get());
简而言之,我想在laravel中执行该问题(How do I add two count(*) results together on two different tables?)的公认解决方案。
答案 0 :(得分:0)
您可以使用这些代码:
$q = DB::tabel('toys')->select('toy_id','little_kid_id')->where('little_kid_id',900); $q1 = DB::tabel('games')->select('game_id','little_kid_id')->where('little_kid_id',900) $data = $q->union($q1)->count();
别忘了并集要求表必须具有相同的列,以便在您的列彼此不匹配的情况下选择列,请不要触摸select语句,否则请随意删除代码
第二种方法是:
DB::table(DB::raw('(SELECT COUNT(*) as c FROM Toys WHERE little_kid_id = 900) t,(SELECT COUNT(*) as c1 from Games WHERE
little_kid_id = 900)t2'))-> selectRaw('t.c + t2.c1 as SumCount')-> toSql(); //如果要获取,请将toSql()更改为get() 数据而不是sql代码
您可以尝试一下。有关更多信息,请参见https://laravel.com/docs/5.8/queries#raw-expressions。如果要由任何用户获取请求参数,请进行确认以防止SQL注入