我想要实现的目标如下:
我想检查是否存在具有相同client_code
但具有较低/不同campaign id
的记录。我现在使用子查询,我也尝试使用连接,但我无法使逻辑正常工作
这就是我现在所拥有的:
$oDB = DB::table('campaigns AS c')
->select(
'c.id AS campaign_id',
'cc.id AS campaign_customer_id'
)
->join('campaign_customers AS cc', 'cc.campaign_id', '=', 'c.id')
->where('c.status', '=', ModelCampaign::STATUS_PLANNED)
->where('c.scheduled', '=', 1)
->whereRaw('c.scheduled_at <= NOW()')
->where('cc.status', '=', ModelCampaignCustomer::STATUS_INVITE_EMAIL_SCHEDULED)
->whereNotIn('cc.client_code', '=', function ($query){
$query ->select(DB::raw(1))
->from('campaign_customers')
->whereRaw('campaign_id', '!=', 'c.id');
})
->where('cc.active', '=', 1)
;
关于如何使用逻辑的任何提示都很棒
答案 0 :(得分:0)
您可以使用->toSql();
方法查看SQL,以便重新构建查询。
答案 1 :(得分:0)
whereNotIn
可能不应该有=
->whereNotIn('cc.client_code', function ($query){
....
修改强>
尝试:
->whereNotIn('cc.client_code', function ($query){
$query->select(DB::raw('client_code'))
->from('campaign_customers')
->whereRaw('campaign_id != c.id');
})
我认为whereRaw
应该是单个文本字符串,或者您可以在这里使用where
(查看此参考https://laravel.com/docs/5.2/queries#advanced-where-clauses)。此外,DB::raw(1)
将为每个子查询结果返回1
,但您需要whereNotIn
的ID。