SQL-запрос к учетной записи для пользователей со вторым именем - PullRequest
1 голос
/ 08 апреля 2019

У меня есть столбец с именем «name», в котором я храню полное имя пользователя (например, «John Wood» или «John Michael Wood»).У меня есть запрос, который проверяет существование этого пользователя в базе данных на основе его имени, например:

SELECT * FROM users WHERE name LIKE var.name%

Где "var.name" - это ввод от пользователя, который ищет этого другого пользователя в базе данных,Если искомого пользователя зовут «Джон Вуд», все работает нормально, но если у пользователя есть отчество «Джон Майкл Вуд», запрос не найдет пользователя, если строка «Джон Вуд» являетсяискал ключ.

Как изменить запрос, чтобы найти пользователя "John Michael Wood", если ключом поиска является "John Wood"?Другими словами, если у пользователя есть отчество, его все равно следует найти в базе данных, даже если его отчество не включено в строку поиска.

Ответы [ 3 ]

1 голос
/ 08 апреля 2019

Вы можете использовать регулярное выражение для решения этой проблемы, заменив пробел между именем и фамилией чем-то, что ищет пробел, за которым следует необязательное второе имя (набор буквенных символов) и другой пробел. Например:

SELECT *
FROM users
WHERE name REGEXP CONCAT('^', REPLACE('John Wood', ' ', ' ([[:alpha:]]+ )?'), '$')

Демонстрация на dbfiddle

create table users (id int auto_increment primary key,
                    name varchar(40));
insert into users (name) values
('John Wood'),
('Johnny Wood'),
('John Woodman'),
('John Michael Wood'),
('Michael Wood'),
('John Smith');

Выход:

id  name
1   John Wood
4   John Michael Wood
0 голосов
/ 08 апреля 2019

Другим вариантом является использование полнотекстового индекса.Если у вас есть полнотекстовый индекс в столбце name, запрос ниже должен возвращать 'John Wood' и 'John Michael Wood':

SELECT * FROM users
WHERE MATCH(`name`) AGAINST ('John Wood' IN NATURAL LANGUAGE MODE)
0 голосов
/ 08 апреля 2019

Вы должны попробовать этот запрос: SELECT * FROM users WHERE name LIKE '%var.name%'
Теперь, когда вы будете искать Джона, он вернет все имена, имеющие john, в любом случае в строке имени

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