sql-使用LIKE一次搜索两列(名字和姓氏)

sql-使用LIKE一次搜索两列(名字和姓氏),sql,Sql,我正试图在我的网站上建立一个搜索功能。我有搜索工作的用户名和电子邮件,但我也希望能够搜索的基础上,用户的全名。我的问题是first_name和last_name是分开存储的,我不确定如何为此构建查询。差不多 SELECT * FROM users WHERE first_name AND last_name LIKE '%$query%' 显然,这是非常错误的-有帮助吗?是的,请尝试使用以下查询: SELECT * FROM users WHERE first_name LIKE '%$que

我正试图在我的网站上建立一个搜索功能。我有搜索工作的用户名和电子邮件,但我也希望能够搜索的基础上,用户的全名。我的问题是first_name和last_name是分开存储的,我不确定如何为此构建查询。差不多

SELECT * FROM users WHERE first_name AND last_name LIKE '%$query%'

显然,这是非常错误的-有帮助吗?

是的,请尝试使用以下查询:

SELECT * FROM users WHERE first_name LIKE '%$query%' AND last_name LIKE '%$query%'
对于Oracle:

SELECT * FROM users WHERE first_name || ' ' || last_name LIKE '%' || $query || '%';
对于SQL Server:

SELECT * FROM users WHERE first_name + ' ' + last_name LIKE '%' + $query + '%';

如果您关心性能,那么可能需要研究全文索引

您还需要清楚地考虑功能。例如,你想让约翰和约翰逊比赛吗?你想让安和乔安妮配对吗?您对此功能的决定会对性能产生很大影响。通常,在另一个字符串中搜索任意子字符串会妨碍索引的使用


不过,你的问题的直接答案是由Amit提供的。它应该可以在任何数据库中运行。

您使用的是哪个数据库?如果我搜索John Smith,它不会检查John Smith的名字,然后检查John Smith的姓氏,即使有名字John和姓氏Smith,也不会返回零结果。因此,您应该有这样的条件:名字像“%John%”,姓氏像“%Smith%”。或者您必须拆分变量,使first-like获得firstname,second-like获得lastname。