无法正确使用查询

wh6knrhe  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(249)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

两年前关门了。
改进这个问题
我试图在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();          
    }
6uxekuva

6uxekuva1#

这就是如何使用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();          
}
bt1cpqcv

bt1cpqcv2#

根据查询,条件之一是如果$supplier\u id的值不匹配,则不应显示任何结果。但是,无论供应商id的值是多少,它都会显示所有结果。
如果您正在使用条件或条件之间,即使任何一个条件为真,它也将返回输出。如果要使用提供的所有条件筛选结果,请使用和。

kadbb459

kadbb4593#

where条件的实际问题是因为它包含“or”条件,所以不管您的供应商id系统返回什么样的结果。见下文example:-
你现在在哪里condition:-

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();          
}

相关问题