如何在MySQL中使用LIKE和任意字序?

see*_*edg 2 mysql sql

为此,我需要使用LIKE关键字或其他类似的运算符:

在数据库中,名称和姓氏存储为一列,并且按顺序存储surname name(例如"Doe John").

我有一个搜索栏,让你输入你的姓名.当我要去搜索时,我要求你输入name surname而不是surname name(例如,如果你输入"John Doe"),我仍然希望看到相同的结果就像你写的一样surname name.

我怎样才能做到这一点?

Qua*_*noi 9

如果您的表是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 DoeDoe 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)