我有一列“名称”,其中存储了用户的全名(例如:“约翰·伍德”或“约翰·迈克尔·伍德”)。我有一个查询,可以根据用户名来检查该用户在数据库中的存在,例如:
SELECT * FROM users WHERE name LIKE var.name%
“ var.name”是用户在数据库中寻找该其他用户的输入。如果要查找的用户名为“ John Wood”,则一切正常,但是如果用户的中间名是“ John Michael Wood”,则如果字符串“ John Wood”是用户名,查询将找不到该用户。搜索关键字。
当搜索键为“约翰·伍德”时,如何修改查询以找到用户“约翰·迈克尔·伍德”?换句话说,如果用户具有中间名,即使他们的中间名未包含在搜索字符串中,他们仍应在数据库中找到。
答案 0 :(得分:1)
您可以使用正则表达式来解决此问题,将名字和姓氏之间的空格替换为搜索空格,后跟可选中间名(一组字母字符)和另一个空格的内容。例如:
SELECT *
FROM users
WHERE name REGEXP CONCAT('^', REPLACE('John Wood', ' ', ' ([[:alpha:]]+ )?'), '$')
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
答案 1 :(得分:0)
Another option is to use a full-text index. If you have a full-text index on your name
column, the query below should return both 'John Wood'
and 'John Michael Wood'
:
SELECT * FROM users
WHERE MATCH(`name`) AGAINST ('John Wood' IN NATURAL LANGUAGE MODE)
答案 2 :(得分:-1)
您应该尝试以下查询:
SELECT * FROM users WHERE name LIKE '%var.name%'
现在,当您搜索John时,它将在名称字符串中的任何实例中返回所有带有john的名称