Несколько похожих столбцов в запросе - PullRequest
3 голосов
/ 27 марта 2012

Я использую CodeIgniter 2.1.

У меня есть таблица с именами, фамилиями и другими столбцами. Я хочу получить тех клиентов, у которых firstname like '%q%' OR lastname like '%q' AND Status = 1

Я использую следующий набор активных записей:

$this->db->select("$this->table.*, $this->table.Active as 'Status'");
$like = array(
 "$this->table.FirstName" => $where['customer_name'],
 "$this->table.LastName" => $where['customer_name']
);
$this->db->or_like($like);

Сгенерированный запрос:

SELECT `customers`.*, `customers`.`Active` as 'Status' 
WHERE `customers`.`Active` = '1' AND 
      `customers`.`FirstName` LIKE '%michael%' OR 
      `customers`.`LastName` LIKE '%michael%' 
ORDER BY `customers`.`RegDate` desc LIMIT 10

Приведенный выше запрос выводит тех клиентов, у которых «michael» либо по имени, либо по фамилии И active = 1, он возвращает все записи, в которых есть michael, либо они активны, либо нет.

Мне нужны записи, которые имеют «micheal» в имени или фамилии И active = 1, я знаю в пользовательском запросе, что если я добавлю предложение Like между маленькой скобкой '()', это даст мне желаемый результат. Я хочу, чтобы вышеуказанный запрос был разобран как:

SELECT `customers`.*, `customers`.`Active` as 'Status' 
WHERE `customers`.`Active` = '1' AND 
      (`customers`.`FirstName` LIKE '%michael%' OR 
      `customers`.`LastName` LIKE '%michael%') 
       ORDER BY `customers`.`RegDate` desc LIMIT 10

Ответы [ 3 ]

0 голосов
/ 21 мая 2013

Группировка не выполняется должным образом при размещении где и or_like с несколькими столбцами в codeigniter.Я тоже сталкивался с этой проблемой,

Лучшее решение - написать запрос в строковом формате и затем выполнить его.

0 голосов
/ 28 октября 2013
 //You can used like that 

$this->db->where("(`car_model` LIKE '%$search_keyword_new%' OR  `car_make_model` LIKE '%$search_keyword_new%' OR `car_name` LIKE '%$search_keyword_new%')");
$this->db->where('user_id',$user_id);
0 голосов
/ 28 марта 2012

Я думаю, вам также нужно использовать функцию or_where

...