Поиск по полному имени вместо только имени или фамилии - PullRequest
2 голосов
/ 08 сентября 2011

Я разрабатываю API, построенный на PHP и Codeigniter, и использую MySQL в качестве базы данных.

У меня есть таблица пользователей с именем Users, которая содержит следующие столбцы:

- ID
- Firstname
- Lastname
- Email

Как можнопользователь ищет эту таблицу, используя полное имя?Например, он отлично работает для поиска Мартином или Смитом, но не Мартином Смитом.

Я использую этот запрос:

$this->db->select('*');
$this->db->from('users');
$this->db->like('firstname', $args['query']);
$this->db->or_like('lastname', $args['query']);

Обновление

Если я использую этот запрос, как предложено ниже, я не могу ничего найти.Не с полным именем, именем или фамилией.Тогда и имя, и фамилия должны совпадать.

$this->db->select('*');
$this->db->from('users');
$this->db->like('firstname', $args['query']);
$this->db->like('lastname', $args['query']);

Ответы [ 5 ]

2 голосов
/ 08 сентября 2011

Прямо из моей головы, а как же

$input = 'Martin Smith';

$names = explode($input);

$this->db->select('*'); 
$this->db->from('users'); 
$this->db->where_in('firstname', $names); 
$this->db->or_where_in('lastname', $names);

Должен вывести что-то вроде:

SELECT * FROM users 
WHERE firstname IN ('Martin', 'Smith') 
OR lastname IN ('Martin', 'Smith')
1 голос
/ 08 сентября 2011

Попробуйте:

$this->db->select('*');
$this->db->from('users');
$this->db->like('firstname', $args['first_name']);
$this->db->like('lastname', $args['last_name']);

В результате:

Select * from users
WHERE firstname LIKE '%first_name%' 
AND lastname LIKE '%last_name%
0 голосов
/ 23 апреля 2013

Я делаю это и отлично работаю для меня:

$terms = explode(' ', $searchtxtusername); 
if(count($terms)>1){
    $this->db->like('u.first_name', $this->db->escape_like_str($terms[0]));
    $this->db->like('u.last_name', $this->db->escape_like_str($terms[1]));
}else{
    $this->db->like('u.first_name', $this->db->escape_like_str($terms[0]));
    $this->db->or_like('u.last_name', $this->db->escape_like_str($terms[0]));
}

Здесь $ searchtxtusername - это поисковый термин, включающий имя и фамилию (разделенные пробелом). Если есть только один термин, он проверяет один и тот же термин как по имени, так и по фамилии.

Пример: если я искал Боба, то условие поиска будет таким:

first_name LIKE '%Bob%' 
AND last_name LIKE '%Bob%'

и если я искал Боба Беггинса, условие поиска становится:

first_name LIKE '%Bob%' 
AND last_name LIKE '%Beggins%'
0 голосов
/ 08 сентября 2011

Вам нужно изменить это ИЛИ для AND:

SELECT * FROM users WHERE Firstname = '$firstname' AND Lastname = '$lastname'
0 голосов
/ 08 сентября 2011

Изменение: $this->db->or_like('lastname', $args['query']);

Кому: $this->db->like('lastname', $args['query']);

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