好的,我有一个名为players
的数据库表,每个玩家都有一个姓和姓。然后我有一个PHP Ajax搜索的东西,我打电话来搜索玩家。例如...在输入框中,有人输入James
,表格中有一行,其名称和姓氏分别为James
和Smith
。
我这样做$check = mysql_query("SELECT * FROM
玩家WHERE
姓LIKE '%$name%' OR
姓名LIKE '%$name%' LIMIT 0, 10") or die(mysql_error());
它返回至少10个姓氏或姓氏like
关键字James
。但是,如果我键入James Smith
,尽管它在表中,我得到的结果为零。
我该如何解决这个问题?
答案 0 :(得分:2)
SELECT * FROM players WHERE CONCAT(forename, ' ', surname) = '$name' OR forename LIKE '%$name%' OR surname LIKE '%$name%'
答案 1 :(得分:1)
将名称拆分为空格,以便查询运行两次(如果有一个空格)
将为两个名称
运行查询$nameBits = explode($name," ");
为每个$ nameBits
运行查询surname LIKE '%$nameBits[$i]%'
答案 2 :(得分:1)
您使用的是InnoDB还是MyISAM?如果您使用MyISAM,则可以创建一个包含组合名称的单个字段,然后使用全文索引进行搜索。所以让我们假设您添加了一个名为combined_names的新字段,您可以像这样搜索它
SELECT * FROM table WHERE match(combined_names) against('John Smith');
这会找到任何带有John或Smith的行,您可以将其更改为仅匹配那些包含两个部分的行,如下所示:
SELECT * FROM table WHERE match(combined_names) against('+John +Smith');
以下是MySQL网站上的文档,您可以在其中找到更多信息: