你好朋友,我正在使用以下查询:
$cur_date = date('Y-m-d');
$clientTemp = DB::table('clients')->where('quotations.exp_date','<',$cur_date)
->join('quotations','quotations.customer_id','=','clients.id')
->get()
->map(function ($clientTemp) {
return [
'id' => $clientTemp->id,
'hash' => $clientTemp->hash,
'name' => $clientTemp->first_name.' '.$clientTemp->last_name,
'email' => $clientTemp->email,
'mobile' => $clientTemp->mobile
];
});
我从两个表中获取此数据:
1. Qutoations
和2. Clients
。
在报价表中,如果exp_date小于当前日期,则将从client table
中获取详细信息。
但是有可能在报价表中有1行以上,但是我只想从customer_id唯一的表中获取一张表。如何从报价表中获取具有相同customer_id的唯一行
答案 0 :(得分:1)
您应该使用groupby
$cur_date = date('Y-m-d'); $clientTemp = DB::table('clients')->where('quotations.exp_date','<',$cur_date)
->join('quotations','quotations.customer_id','=','clients.id')
->->groupBy('quotations.customer_id')
->get()
->map(function ($clientTemp) {
return [
'id' => $clientTemp->id,
'hash' => $clientTemp->hash,
'name' => $clientTemp->first_name.' '.$clientTemp->last_name,
'email' => $clientTemp->email,
'mobile' => $clientTemp->mobile
];
});
答案 1 :(得分:1)
您需要使用GROUP BY子句,但是由于MySQL的默认ONLY_FULL_GROUP_BY模式,您必须汇总具有多个值的任何列。
您似乎实际上并没有使用引号中的任何值,因此您可以添加:
std::lock_guard
否则,您需要告诉MySQL如何聚合具有多个值的任何行,例如:
DB::table('clients')->select('clients.*')->groupBy('clients.id')...