Php 无法正确使用查询
我试图在CodeIgniter中运行以下查询,但它没有返回正确的输出 根据查询,条件之一是如果$supplier\u id的值不匹配,则不应显示结果。但是,无论供应商id的值是什么,它都会显示所有结果。有人能帮我纠正这个问题吗Php 无法正确使用查询,php,mysql,sql,codeigniter,Php,Mysql,Sql,Codeigniter,我试图在CodeIgniter中运行以下查询,但它没有返回正确的输出 根据查询,条件之一是如果$supplier\u id的值不匹配,则不应显示结果。但是,无论供应商id的值是什么,它都会显示所有结果。有人能帮我纠正这个问题吗 public function get_onboarded_detail() { $supplier_id = 40; $query = $this->db->select('*') ->fr
public function get_onboarded_detail()
{
$supplier_id = 40;
$query = $this->db->select('*')
->from('job')
->join('job_workforce', 'job_workforce.job_id = job.id', 'Right')
->where('job_workforce.supplier_id',$supplier_id)
->where('job_workforce.status','onboarded')
->or_where('job_workforce.status','job_offer')
->or_where('job_workforce.status','offer_accepted_by_client')
->or_where('job_workforce.status','offer_accepted_by_supplier')
->get();
$res = $query->result();
}
根据查询,条件之一是如果$supplier\u id的值不匹配,则不应显示结果。但是,无论供应商id的值是什么,它都会显示所有结果
如果在条件之间使用或,即使任何一个条件为真,它也将返回输出。如果要使用提供的所有条件筛选结果,请使用和
根据查询,条件之一是如果$supplier\u id的值不匹配,则不应显示结果。但是,无论供应商id的值是什么,它都会显示所有结果
如果在条件之间使用或,即使任何一个条件为真,它也将返回输出。如果要使用提供的所有条件筛选结果,请使用和 where条件的实际问题,因为它包含“或”条件,所以无论您的供应商id系统如何,都将返回真实结果。请参见以下示例:- 您目前的情况:-
WHERE job_workforce.supplier_id = 40 AND job_workforce.status = 'onboarded' OR job_workforce.status = 'job_offer' OR job_workforce.status = 'offer_accepted_by_client' OR job_workforce.status = 'offer_accepted_by_supplier'
应该是:-
WHERE job_workforce.supplier_id = 40 AND (job_workforce.status = 'onboarded' OR job_workforce.status = 'job_offer' OR job_workforce.status = 'offer_accepted_by_client' OR job_workforce.status = 'offer_accepted_by_supplier')
要使用codeigniter进行校正,请使用:
public function get_onboarded_detail()
{
$supplier_id = 40;
$query = $this->db->select('*')
->from('job')
->join('job_workforce', 'job_workforce.job_id = job.id', 'Right')
->where("job_workforce.supplier_id = $supplier_id AND (job_workforce.status = 'onboarded' OR job_workforce.status = 'job_offer' OR job_workforce.status = 'offer_accepted_by_client' OR job_workforce.status = 'offer_accepted_by_supplier')");
->get();
$res = $query->result();
}
where条件的实际问题,因为它包含“或”条件,所以无论您的供应商id系统如何,都将返回真实结果。请参见以下示例:- 您目前的情况:-
WHERE job_workforce.supplier_id = 40 AND job_workforce.status = 'onboarded' OR job_workforce.status = 'job_offer' OR job_workforce.status = 'offer_accepted_by_client' OR job_workforce.status = 'offer_accepted_by_supplier'
应该是:-
WHERE job_workforce.supplier_id = 40 AND (job_workforce.status = 'onboarded' OR job_workforce.status = 'job_offer' OR job_workforce.status = 'offer_accepted_by_client' OR job_workforce.status = 'offer_accepted_by_supplier')
要使用codeigniter进行校正,请使用:
public function get_onboarded_detail()
{
$supplier_id = 40;
$query = $this->db->select('*')
->from('job')
->join('job_workforce', 'job_workforce.job_id = job.id', 'Right')
->where("job_workforce.supplier_id = $supplier_id AND (job_workforce.status = 'onboarded' OR job_workforce.status = 'job_offer' OR job_workforce.status = 'offer_accepted_by_client' OR job_workforce.status = 'offer_accepted_by_supplier')");
->get();
$res = $query->result();
}
这就是如何使用where条件的codeigniter分组。您可以相应地进行分组
public function get_onboarded_detail() {
$supplier_id = 40;
$query = $this->db->select('*')
->from('job')
->join('job_workforce', 'job_workforce.job_id = job.id', 'Right')
->group_start()
->where('job_workforce.supplier_id',$supplier_id)
->where('job_workforce.status','onboarded')
->group_end()
->group_start()
->or_where('job_workforce.status','job_offer')
->or_where('job_workforce.status','offer_accepted_by_client')
->or_where('job_workforce.status','offer_accepted_by_supplier')
->group_end()
->get();
$res = $query->result();
}
这就是如何使用where条件的codeigniter分组。您可以相应地进行分组
public function get_onboarded_detail() {
$supplier_id = 40;
$query = $this->db->select('*')
->from('job')
->join('job_workforce', 'job_workforce.job_id = job.id', 'Right')
->group_start()
->where('job_workforce.supplier_id',$supplier_id)
->where('job_workforce.status','onboarded')
->group_end()
->group_start()
->or_where('job_workforce.status','job_offer')
->or_where('job_workforce.status','offer_accepted_by_client')
->or_where('job_workforce.status','offer_accepted_by_supplier')
->group_end()
->get();
$res = $query->result();
}
尝试回显查询
echo$this->db->last_query()代码>退出()
在$res=$query->result()之前
@Shreyas Achar我得到这个o/p=SELECT*FROMjob
右键加入job\u workforce
上的job\u id
=job
id
供应商id=40和job\u workforce
状态工作人员
状态
='job\u offer'或工作人员
状态
='offer\u accepted\u by\u client'或job\u workforce
状态='offer\u accepted\u by\u supplier\u id=''作业
右键加入作业
关于作业
作业id=作业
其中作业
供应商作业id=''和作业
状态='onboarded'或作业
作业状态='job\u workforce
status
='offer\u accepted\u by\u client'或job\u workforce
status
='offer\u accepted\u by\u supplier'如果是我,我会忘记所有CI内容,而是专注于获取一个正常工作的查询。从这里我们可以讨论如何用CI的语法重写它。如果您想采用这种方法,请参阅:尝试回显查询echo$this->db->last_query()代码>退出()
在$res=$query->result()之前
@Shreyas Achar我得到这个o/p=SELECT*FROMjob
右键加入job\u workforce
上的job\u id
=job
id
供应商id=40和job\u workforce
状态工作人员
状态
='job\u offer'或工作人员
状态
='offer\u accepted\u by\u client'或job\u workforce
状态='offer\u accepted\u by\u supplier\u id=''作业
右键加入作业
关于作业
作业id=作业
其中作业
供应商作业id=''和作业
状态='onboarded'或作业
作业状态='job\u workforce
status
='offer\u accepted\u by\u client'或job\u workforce
status
='offer\u accepted\u by\u supplier'如果是我,我会忘记所有CI内容,而是专注于获取一个正常工作的查询。从这里我们可以讨论如何用CI的语法重写它。如果你想采用这种方法,请看:我感谢你的努力,但我不相信,这被标记为正确答案,并且得到了2个喜欢。因为它不使用codeigniter函数,而是编写自定义条件。需要注意的是,在MySQL中,这可以缩写为,其中jw.supplier\u id=40和jw.status in('onboarded'、'job\u offer'、'offer\u accepted\u by\u client'、'offer\u accepted\u by\u supplier')
我感谢您的努力,但我不相信,这是正确的答案,也得到了两个赞。因为它不使用codeigniter函数,而是编写自定义条件。一切都有规定。请注意,在MySQL中,这可以缩写为,其中jw.supplier\u id=40和jw.status in('onboard'、'job\u offer'、'offer\u accepted\u by\u client'、'offer\u accepted\u by\u supplier')