0

好的,我有一个名为的数据库表,players每个玩家都有一个名字和姓氏。然后我有一个 PHP Ajax 搜索工具,我调用它来搜索玩家。例如...在输入框中,有人键入James,并且在表格中有一行分别包含姓名和James姓氏Smith

我做这个$check = mysql_query("SELECT * FROM球员WHERELIKE '%$name%' ORLIKE '%$name%' LIMIT 0, 10") or die(mysql_error());

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

我该如何解决?

4

3 回答 3

2
SELECT * FROM players WHERE CONCAT(forename, ' ', surname) = '$name' OR forename LIKE '%$name%' OR surname LIKE '%$name%'
于 2013-01-13T23:11:54.237 回答
1

将名称拆分为空格,以便查询运行两次(如果有一个空格)

查询将针对两个名称运行

$nameBits = explode($name," ");

为每个 $nameBits 运行查询

surname LIKE '%$nameBits[$i]%' 
于 2013-01-13T23:02:28.187 回答
1

您使用的是 InnoDB 还是 MyISAM?如果您使用 MyISAM,您可以创建一个包含组合名称的字段,然后使用全文索引进行搜索。因此,假设您添加了一个名为 combine_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

于 2013-01-13T23:53:19.490 回答