我有一张这样的表
company service time
ABC carwash 2:00
ABC carwash 4:00
ABC carwash 5:00
ABC repair 6:00
DEF repair 8:00
因此,公司ABC将多次出现,重复服务,但时间字段会有所不同。
当我执行查询时
$results = company::query()
->select(company.name, service, time)
->groupBy(company.name)
->where('service' , '=', 'carwash')
->get();
我得到公司ABC的一个结果,它的服务和时间。这就是我想要的。但是,我希望这个结果也可以显示其他时间。所以,我理想的查询结果将是一个结果,但我可以访问所有的时间,即2:00,4:00,5:00
所以,当我使用像这样的foreach函数时
<div class="items>
foreach($results as $items)
$items->time
</div>
我想循环遍历 - 2:00,4:00,5:00并在视图中显示,作为一个结果,但它理想情况下会一直显示空格。
所以,这是我想要的结果,这就是我使用groupBy的原因
公司 ABC ,服务洗车,时间 2:00,4:00,5:00
我不想要像这样的多个结果
公司 ABC ,服务洗车,时间 2:00
公司 ABC ,服务洗车,时间 4:00
公司 ABC ,服务洗车,时间 5:00
答案 0 :(得分:2)
您在MySQL中需要的查询是:
mysql> SELECT company, service, GROUP_CONCAT(time)
FROM companies GROUP BY company, service;
+---------+---------+--------------------+
| company | service | group_concat(time) |
+---------+---------+--------------------+
| ABC | carwash | 2:00,4:00,5:00 |
| ABC | repair | 6:00 |
| DEF | repair | 8:00 |
+---------+---------+--------------------+
3 rows in set (0.00 sec)
要在Laravel中执行此操作,您需要DB::raw
:
$results = Company::select(DB::raw('company.name, service, group_concat(time)'))
->where('service' , '=', 'carwash')
->groupBy('company.name')
->get();
您可能希望为分组结果设置别名,以便轻松访问它们:
$results = Company::select(DB::raw('company.name, service, group_concat(time) AS times'))
然后您可以使用$results->times
。