Laravel query LeftJoin show all categories even in right table 没有那个类别
Laravel query LeftJoin show all categories even in right table have not that category
我有两个 table 以下:
tb_category
id |name |
----------------
1 |Category A|
2 |Category B|
3 |Category C|
4 |Category D|
5 |Category E|
tb_sales
id |customer |region |product |category
-------------------------------------------------------
1 James Region A Fruits Category A
2 Billy Region B Vegetable Category B
3 Benny Region C Computer Category C
4 John Region A Table Category D
5 Sarah Region B Fruits Category A
6 James Region A Computer Category C
7 Clara Region B Fruits Category A
8 Benny Region C Vegetable Category B
9 James Region A Vegetable Category B
10 Billy Region C Fruits Category A
我想创建查询和结果 table 如下 table
即使在 tb_sales 中所有类别计数和显示都没有类别。
No |name |Region A |Region B |Region C
-----------------------------------------------------
1 Category A 1 1 1
2 Category B 1 1 1
3 Category C 1 0 1
4 Category D 1 0 0
5 Category E 0 0 0
in my controller I have write like this:
$cat = DB::table('tb_sales')
->leftJoin('tb_category','tb_category.name', '=', 'tb_sales.category')
->select(DB::raw('category, region, count(category) as c_Cat'))
->groupBy('category', 'region')
->get();
return view('category', ['Category'=> $cat]);
谁能帮我解决这个问题..?
提前致谢。
基本上,您使用从 tb_sales 到类别的左连接,其中您想要检索所有类别及其区域。试试下面的代码
$cat = DB::table('tb_category')
->leftJoin('tb_sales','tb_category.name', '=', 'tb_sales.category')
->select(DB::raw('category, region, count(category) as c_Cat'))
->groupBy('category', 'region')
->get();
我已经用 laracast @Tray2 的回答解决了。谢谢@Tray2。
使用这个查询:
SELECT c.name,
(SELECT count(s.*) from tb_sales s WHERE category = c.name AND s.region = 'Region A') AS region_a,
(SELECT count(s.*) from tb_sales s WHERE category = c.name AND s.region = 'Region B') AS region_b,
(SELECT count(s.*) from tb_sales s WHERE category = c.name AND s.region = 'Region C') AS region_c
FROM tb_category c
ORDER by c.name ASC
并将该查询传递给控制器:
$result = DB::select(<the query here>);
我希望这可以帮助有类似问题的人。
我有两个 table 以下:
tb_category
id |name |
----------------
1 |Category A|
2 |Category B|
3 |Category C|
4 |Category D|
5 |Category E|
tb_sales
id |customer |region |product |category
-------------------------------------------------------
1 James Region A Fruits Category A
2 Billy Region B Vegetable Category B
3 Benny Region C Computer Category C
4 John Region A Table Category D
5 Sarah Region B Fruits Category A
6 James Region A Computer Category C
7 Clara Region B Fruits Category A
8 Benny Region C Vegetable Category B
9 James Region A Vegetable Category B
10 Billy Region C Fruits Category A
我想创建查询和结果 table 如下 table 即使在 tb_sales 中所有类别计数和显示都没有类别。
No |name |Region A |Region B |Region C
-----------------------------------------------------
1 Category A 1 1 1
2 Category B 1 1 1
3 Category C 1 0 1
4 Category D 1 0 0
5 Category E 0 0 0
in my controller I have write like this:
$cat = DB::table('tb_sales')
->leftJoin('tb_category','tb_category.name', '=', 'tb_sales.category')
->select(DB::raw('category, region, count(category) as c_Cat'))
->groupBy('category', 'region')
->get();
return view('category', ['Category'=> $cat]);
谁能帮我解决这个问题..? 提前致谢。
基本上,您使用从 tb_sales 到类别的左连接,其中您想要检索所有类别及其区域。试试下面的代码
$cat = DB::table('tb_category')
->leftJoin('tb_sales','tb_category.name', '=', 'tb_sales.category')
->select(DB::raw('category, region, count(category) as c_Cat'))
->groupBy('category', 'region')
->get();
我已经用 laracast @Tray2 的回答解决了。谢谢@Tray2。
使用这个查询:
SELECT c.name,
(SELECT count(s.*) from tb_sales s WHERE category = c.name AND s.region = 'Region A') AS region_a,
(SELECT count(s.*) from tb_sales s WHERE category = c.name AND s.region = 'Region B') AS region_b,
(SELECT count(s.*) from tb_sales s WHERE category = c.name AND s.region = 'Region C') AS region_c
FROM tb_category c
ORDER by c.name ASC
并将该查询传递给控制器:
$result = DB::select(<the query here>);
我希望这可以帮助有类似问题的人。