为此,我需要使用LIKE关键字或其他类似的运算符:
在数据库中,名称和姓氏存储为一列,并且按顺序存储surname name(例如"Doe John").
我有一个搜索栏,让你输入你的姓名.当我要去搜索时,我要求你输入name surname而不是surname name(例如,如果你输入"John Doe"),我仍然希望看到相同的结果就像你写的一样surname name.
我怎样才能做到这一点?
如果您的表是MyISAM,您可以FULLTEXT在两个字段上创建索引:
CREATE FULLTEXT INDEX ON mytable (name, surname)
Run Code Online (Sandbox Code Playgroud)
并发出此查询:
SELECT *
FROM mytable
WHERE MATCH(name, surname) AGAINST ('+John +Doe' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)
这将返回John Doe和Doe John.
在MyISAM表上,即使不创建索引,此查询也会起作用,但是,在这种情况下,它将更慢.
更新:
即使您在单个字段中有姓名,这也可以使用:
CREATE TABLE t_name (id INT NOT NULL PRIMARY KEY, name VARCHAR(200) NOT NULL) ENGINE=MyISAM;
INSERT
INTO t_name
VALUES
(1, 'John Doe'),
(2, 'Doe John');
SELECT *
FROM t_name
WHERE MATCH(name) AGAINST ('+John +Doe' IN BOOLEAN MODE);
1, 'John Doe'
2, 'Doe John'
Run Code Online (Sandbox Code Playgroud)
更新2:
在InnoDB表格中,您可以使用正则表达式:
SELECT *
FROM t_name
WHERE name RLIKE '[[:<:]]John[[:>:]]'
AND name RLIKE '[[:<:]]Doe[[:>:]]'
Run Code Online (Sandbox Code Playgroud)