Database 同时搜索两个字段

Database 同时搜索两个字段,database,mysql,Database,Mysql,我有一张姓名表 firstname lastname --------- --------- Joe Robertson Sally Robert Jim Green Sandra Jordan 我试图根据包含全名的输入搜索此表。例如: input: Joe Robert 我想用 SELECT * FROM tablename WHERE firstname LIKE 但是该表分别存储了名字和姓氏,因此我不确定在本例

我有一张姓名表

firstname    lastname
---------    ---------
Joe          Robertson
Sally        Robert
Jim          Green
Sandra       Jordan
我试图根据包含全名的输入搜索此表。例如:

input: Joe Robert
我想用

SELECT * FROM tablename WHERE firstname LIKE

但是该表分别存储了名字和姓氏,因此我不确定在本例中如何在
MyISAM
中进行搜索:

SELECT  *
FROM    mytable
WHERE   MATCH(firstname, lastname) AGAINST ("Joe* Robert*" IN BOOLEAN MODE);
如果您创建
全文
索引,这将运行得更快:

CREATE FULLTEXT INDEX ON mytable (firstname, lastname)
为了使查询能够搜索短名称(如本例中的
Joe
),在创建索引之前,需要将变量
@@ft\u min\u word\u len
设置为
1

在InnoDB中,您需要拆分搜索字符串:

SELECT  *
FROM    mytable
WHERE   firstname LIKE 'Joe%'
        AND lastname LIKE 'Robert%'

Quassnoi方法的替代方法:

SELECT  *
FROM    mytable
WHERE   CONCAT(firstname, " ", lastname) = "Joe Robert"

这将是非常缓慢,但它应该工作。您可能希望在查询中使用单引号。对于精确匹配语义,它不会比没有索引的全文查询慢。但是@op似乎需要部分匹配,而这个查询不会匹配像Joel Robertson这样的名字,在没有全文搜索的情况下以布尔模式运行查询速度很慢,所以我不建议这样做。修改服务器变量,如“@@ft\u min\u word\u len”在大多数情况下都不是理想的cz,因为您无法编辑mysql配置文件。最简单的是您提到的使用like和通配符的查询