我被困在一个问题上,我不太确定如何正确地重新格式化。以下是控制器功能的相关部分:
$paidQuery = DB::table('shipments')
->leftJoin('customers', 'shipments.bill_to', '=', 'customers.id')
->leftJoin('customer_addresses', 'shipments.billerLocation', '=', 'customer_addresses.id')
->leftJoin('payments_distributions','shipments.id','=','payments_distributions.shipment_id')
->select('shipments.*', 'customers.customer_name','customer_addresses.billingMethod',DB::raw('COALESCE(sum(payments_distributions.amount),0) AS paid'));
$paidQuery->where('shipments.shipment_origin', 1);
$paidQuery->where('shipments.balance', '<', 'paid')
->where('shipments.balance','>', 0)
->whereNotIn('shipments.shipment_billing_status', [2,3,5]);
if(!empty($_GET['startDate']) || !empty($_GET['endDate'])){
$paidQuery->where(function($query) {
if(empty($_GET['startDate'])){
$startDate = Carbon::create(1900, 1, 1, 0, 0, 0);
} else {
$startDate = $_GET['startDate'];
}
if(empty($_GET['endDate'])){
$endDate = Carbon::now();
} else {
$endDate = $_GET['endDate'];
}
return $query->whereBetween('date', [$startDate, $endDate])
->orWhereNull('date');
});
}
$paidQuery->whereNull('shipments.deleted_at')
->orderBy('shipments.pro_number', 'DESC')
->groupBy('shipments.id')
->limit(100);
现在,正如您在上面看到的,有一个select语句(第5行),其中末尾是一个别名。这只是一个如何返回我得到的数据的例子。我用它来验证什么是有效的,什么是无效的,特定的行是有效的,无效的部分是这行:
$paidQuery->where('shipments.balance', '<', 'paid')
什么是正确的方法来获得所有这些数据的和(或零(0)) amount
从 payments_distributions
记录ID相同的表?
我一直在四处寻找,找不到一个合适的例子,我正在寻找什么,但肯定它更可能是搜索词或短语。谢谢。
1条答案
按热度按时间w41d8nur1#
在mysql中,不可能在同一级别上使用where子句中select子句中定义的别名。但是,mysql过载了
HAVING
运算符以允许使用别名,因此以下操作应在此处起作用:在这里,我建议您使用以下原始mysql: