Случай игнорирования запроса MySQL Active record

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

$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 ответа

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

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

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

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

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

Другие вопросы по тегам