on是在生成临时表的时候使用的条件,不管on的条件是否起到作用,都会返回左表的行,
where则是在生成临时表之后使用的条件,此时已经不管是否使用了left join了,只要条件不为真的行,全部过滤掉。
--所以要写在on条件之后
错误写法:
Db::name('User')->alias('a')->join('__KQ_HISTORY__ b','a.user_id = b.user_id','left')->join('__KQ_STATUS__ c','b.kq_status_id = c.id','left')->where(['a.user_state'=>0,'a.department_id'=>(string)input('bm_id/d'),'b.kqrq'=>date('Y-m-d')])->order('a.user_sort asc')->limit(150)->field('a.user_name,c.name')->select();
正确写法:
Db::name('User')->alias('a')->join('__KQ_HISTORY__ b','a.user_id = b.user_id and b.kqrq = "'.date('Y-m-d').'"','left')->join('__KQ_STATUS__ c','b.kq_status_id = c.id','left')->where(['a.user_state'=>0,'a.department_id'=>(string)input('bm_id/d')])->order('a.user_sort asc')->limit(150)->field('a.user_name,c.name')->select();
有问题欢迎点击右侧联系我qq交流