Поиск по базе данных CodeIgniter - PullRequest
0 голосов
/ 22 сентября 2011

У меня есть поисковая форма, которая используется персоналом для поиска учетной записи пользователя. Я хочу, чтобы форма поиска принимала входные данные от пользователя и искала в БД пользователя, соответствующего ей. Вот моя структура БД ...

Таблица пользователей -> (id, fname, lname, ip_address .... и т. Д.)

Вот что я использую в своей модели для поиска пользователя ...

$this->db->or_like('fname', $query);
$this->db->or_like('lname', $query);
$this->db->or_like('email', $query);

$this->db->or_where('ip_address', $query);

$query = $this->db->get('users');

Это прекрасно работает для большинства поисков. Например ....

Поиск: Билл

возвращает всех пользователей с именем или фамилией счета .....

Однако поиск по имени и фамилии не возвращает пользователя, даже если есть совпадающий пользователь. Пример ....

Поиск: Билл Гейтс

Этот поиск не возвращает пользователя с именем Билла и именем Гейтса. Что я могу сделать, чтобы сделать эту работу?

Ответы [ 2 ]

6 голосов
/ 22 сентября 2011

Вам придется втирать поисковый запрос в несколько отдельных терминов.CI запишет запрос в виде:

WHERE fname LIKE '%Bill Gates%' OR lname LIKE '%Bill Gates%' etc...

, который никогда не будет совпадать, так как «Билл Гейтс» никогда не появляется в одном поле в базе данных.Но если вы разделите его на несколько слов (Bill и Gates) и добавите каждое слово в набор or по отдельности, вы получите совпадения.

Другой вариант, если вы используетеТаблицы MyISAM предназначены для использования полнотекстового индекса по всем 3 полям, в результате чего будут найдены «ворота счета», даже если счет - это одно поле, а ворота - в другом.в процессе разработки, но пока что myisam только в рабочем коде.

0 голосов
/ 22 сентября 2011

Поскольку вы разделяете имя и фамилию в базе данных и используете одну и ту же переменную для обоих вызовов or_like (), вы можете искать только одно слово.

Вы должны разделить строку в "" (пробел) и вызовите or_like () для каждой части или используйте форму с 3 отдельными полями ввода (imho, лучшая идея).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...