【发布时间】:2020-01-05 16:33:14
【问题描述】:
我有 2 个表要使用 join 查询,即 loans 和 amortizations 表。
Loans 表有很多摊销,所以loans.id 是对amortizations 表中amortizations.loan_id 的引用。
Loan id:3 在amortizations table 中存在两次,每个都有一个value=10,800。Loan id:5 在amortizations table 中也存在两次,每个都有一个value=11,100,Loan id:11 也是如此在amortizations table 中存在两次,每个都有一个value=5400。
当你把它加起来时,total 就是54,600。但我希望 id 是不同的,这样这些值就不会添加两次。所以总数将等于27,300。即使在 Laravel 中使用 distinct(),我下面的现有查询也会返回 54,600 值而不是 27,300。我将如何实现这一目标?
Controller query
$oneToThirtyDue = Amortization::distinct('amortizations.loan_id')
->join('loans', 'loans.id', '=', 'amortizations.loan_id')
->select('loans.loan_type',\DB::raw('SUM(loans.loan_balance) as total_val'))
->where('amortizations.payment_status',0)
->where('amortizations.schedule', '<', date('Y-m-d'))
->where('amortizations.past_due', '<=', 30)
->groupBy('loans.loan_type')
->orderBy('loans.loan_type')
->get();
请帮忙。非常感谢。
【问题讨论】:
-
你能把你的加入切换到这个并告诉我们结果是什么吗?
Amortization::distinct('amortizations.loan_id') ->join('loans', 'amortizations.loan_id', '=', 'loans.id') -
结果是一样的先生
-
尝试将所有列用于不同的功能。
Amortization::distinct('amortizations.load_id','value', 'column3'....) -
都不行 :(
-
我能想到的最后一件事是使用 DB::Raw() 函数来选择不同的 Amortization.loadId。您可以在以下链接中详细了解它:link。使用 DB::raw() 应该让你使用原始 sql 语句。