Случай игнорирования запроса MySQL Active record - PullRequest
2 голосов
/ 11 апреля 2011

У меня есть следующий запрос активной записи:

$this->db->select('id, firstname, surname');
$this->db->from('users');
$this->db->where('site_id',$siteid);
$this->db->like('firstname', $name);
$this->db->or_like('surname', $name); 
$query = $this->db->get();

Это прекрасно работает, за исключением того, что мои имена в БД могут содержать имена в верхнем и нижнем регистре. Если регистр не совпадает, запрос не выполняется.

Можно ли как-нибудь игнорировать случай с моим запросом?

Ответы [ 2 ]

1 голос
/ 09 января 2016

Попробуйте, у меня все работает нормально: (вы можете использовать нижний или верхний режим с обеих сторон для нечувствительного запроса)

$this->db->select('id, firstname, surname');
$this->db->from('users');
$this->db->where('site_id',$siteid);
$this->db->like('lower(firstname)', strtolower($name));
$this->db->or_like('lower(surname)', strtolower($name)); 
$query = $this->db->get();
1 голос
/ 11 апреля 2011

Один из способов манипулировать чувствительностью к регистру в mysql, чтобы ваше поле имени было в верхнем или нижнем регистре в db, преобразовать заданную строку в этот формат и сопоставить ее.

edit: like - это оператор иэто зависит от используемой вами базы данных, будет ли она чувствительной к регистру или нет.В postgres он нечувствителен к регистру, тогда как в mysql он чувствителен к регистру.Так что это зависит от базы данных, которую вы используете.

edit: Еще один рабочий, но не очень полезный способ - использовать функцию ucase () или lcase () в данном поле, а затем сопоставлять строчные или прописные буквы совпадения.Хотя у него будут проблемы с производительностью.

...