MySQL搜索forename和surname

时间:2013-01-13 23:00:33

标签: php mysql ajax

好的,我有一个名为players的数据库表,每个玩家都有一个姓和姓。然后我有一个PHP Ajax搜索的东西,我打电话来搜索玩家。例如...在输入框中,有人输入James,表格中有一行,其名称和姓氏分别为JamesSmith

我这样做$check = mysql_query("SELECT * FROM玩家WHERELIKE '%$name%' OR姓名LIKE '%$name%' LIMIT 0, 10") or die(mysql_error());

它返回至少10个姓氏或姓氏like关键字James。但是,如果我键入James Smith,尽管它在表中,我得到的结果为零。

我该如何解决这个问题?

3 个答案:

答案 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网站上的文档,您可以在其中找到更多信息:

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html