Объединить где-как-где в


Допустим, у меня есть модель в CI, возвращающая то, что нужно пользователю(ам)..

$find = 'something';
$id_user = Array ( [0] => 1 [1] => 5 [2] => 20 [3] => 21 ) ;
Итак, я должен положить это сюда, но что-то идет не так ..
    public function find_pr_by_user ($find,$id_users) {
        $this -> db -> where_in ('req_by_id'.$id_users || 'check_by_id',$id_users || 'approve_by_id',$id_users);
        $this -> db -> where ("(ref_no LIKE '%$find%' || pr_title LIKE '%$find%' || req_date LIKE '%$find%')");
        $query = $this -> db -> get ('pr_data') ;
        return $query -> result () ;
    }

Я получаю преобразование массива ошибок в строку; входные данные у меня есть из $find и $id_users, которые могут быть любыми. Я ожидал этой логики, дайте мне весь массив из таблицы PR_DATA , который имеет %$find% в столбце ref_no или pr_title или req_date, но только имеет $id_users *(1 или 5 или 20 или 21) в столбце req_by_id или check_by_id или approve_by_id.

Может ли кто-нибудь помочь?

1 2

1 ответ:

Этот ответ основан на предположении, что вам нужна скобка в первом where_in() коде.

К сожалению, CodeIgniter не полностью поддерживает скобки с активной записью. Поэтому вам придется использовать where() с более сложным синтаксисом SQL в нем.

public function find_pr_by_user ($find,$id_users) {
    $id_users_glued = implode(",",$id_users);
    $this->db->where('(req_by_id IN (' . $id_users_glued . ') || check_by_id IN (' . $id_users_glued . ') || approve_by_id IN (' . $id_users_glued . '))');
    $this->db->where("(ref_no LIKE '%$find%' || pr_title LIKE '%$find%' || req_date LIKE '%$find%')");
    $query = $this->db->get('pr_data') ;
    return $query->result () ;
}

В активной записи CI, вот как будет обработан синтаксис:

Первый, где будет рассматриваться как: WHERE (req_by_id IN ($id_users_glued) || check_by_id IN ($id_users_glued) || approve_by_id IN ($id_users_glued)

$id_users_glued произведет что-то вроде 1,2,3,4,5

Второй Где будет рассматриваться как: AND (ref_no LIKE '%$find%' || pr_title LIKE '%$find%' || req_date LIKE '%$find%')

Примечание: я не тестировал код, потому что у меня нет вашей структуры БД. Дай мне знать, если это не сработает.