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和通配符的查询