не в состоянии правильно использовать запрос

0

Я пытаюсь запустить следующий запрос в CodeIgniter, но он не возвращает правильный вывод. Согласно запросу, одним из условий является то, что если значение $ vend_id не сопоставляется, результат не должен отображаться. Тем не менее, он отображает весь результат независимо от того, что такое значение параметра vend_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();          
    }
  • 0
    попробуйте повторить запрос echo $this->db->last_query(); exit(); перед $res = $query->result();
  • 0
    @Shreyas Ахар Я получаю это о / р = SELECT * FROM job RIGHT JOIN job_workforce ON job_workforce . job_id = job . id ГДЕ job_workforce . supplier_id = 40 И job_workforce . status = 'onboarded' ИЛИ job_workforce . status = 'job_offer' ИЛИ job_workforce . status = 'offer_accepted_by_client' ИЛИ job_workforce . status = 'offer_accepted_by_supplier'
Показать ещё 5 комментариев
Теги:
codeigniter
mysqli

3 ответа

2
Лучший ответ

Фактическая проблема с вашим состоянием, потому что в нем содержится условие "ИЛИ", поэтому независимо от того, что ваша система vend_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();          
}
  • 1
    Я ценю усилия, но я не верю, это помечено как правильный ответ и также получил 2 лайка. Так как он не использует функции codeigniter, вместо этого пишет пользовательские условия. Есть условия для всего.
  • 1
    Обратите внимание, что в MySQL это может быть сокращено до WHERE jw.supplier_id = 40 AND jw.status IN ('onboarded','job_offer','offer_accepted_by_client','offer_accepted_by_supplier')
0

Таким образом, вы можете использовать группировку кодовое слово где условия. Вы можете создавать группы соответственно.

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

Согласно запросу, одним из условий является то, что если значение $ vend_id не сопоставляется, результат не должен отображаться. Тем не менее, он отображает весь результат независимо от того, что такое значение параметра vend_id.

Если вы используете OR между условиями, даже если какое-либо условие истинно, оно вернет выход. Используйте И, если вы хотите отфильтровать свой результат со всеми предоставленными условиями.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню