Php 无法正确使用查询

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

我试图在CodeIgniter中运行以下查询,但它没有返回正确的输出 根据查询,条件之一是如果$supplier\u id的值不匹配,则不应显示结果。但是,无论供应商id的值是什么,它都会显示所有结果。有人能帮我纠正这个问题吗

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*FROM
job
右键加入
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*FROM
job
右键加入
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')