如何使用给定的一个变量搜索lastname和firstname

时间:2016-07-05 09:41:57

标签: php mysql

我有first_name和last_name

所以这是我目前关于PHP的查询

SELECT * FROM users WHERE CONCAT_WS(first_name, " ", last_name)') LIKE $name.'%'

我的样本数据库:

firstname   |   lastname
-------------------------
Joe         |   Smith
Bien        |   Tibor
Brocs       |   Mar
Joe         |   Gold

这是我的测试结果

测试1:name = Joe

firstname   |   lastname
-------------------------
Joe         |   Smith
Joe         |   Gold

测试2:name = Smith

firstname   |   lastname
-------------------------
"No Results Found"

5 个答案:

答案 0 :(得分:1)

%变量的任意一侧使用通配符$name

$sql = "SELECT * FROM `users` WHERE CONCAT(`first_name`, ' ', `last_name`) LIKE '%".$name."%'";

答案 1 :(得分:0)

在$ name的两端添加%widlcard,因此您的查询看起来像'%Smith%'

毋庸置疑,您需要考虑正确的sql清理,因此请考虑使用类似PDO的内容

答案 2 :(得分:0)

您的CONCAT_WS语法错误

应该是

CONCAT_WS (separator, string1, string2,…)

答案 3 :(得分:0)

如果要从搜索“oe”中排除结果,则可以改为使用OR:

SELECT * FROM users WHERE firstname = ' . $name .' OR lastname = ' . $name

答案 4 :(得分:0)

首先在桌面上创建一个var $labels = $("label[for]"); $('input').map(function(){ var label = $labels.filter('[for="'+this.id+'"]'); var lang =label.attr("data-selected"), enText = label.attr("data-en"), frText = label.attr("data-fr"); if("en" == lang){ label.text(frText); label.attr("data-selected", "fr") }else{ label.text(euText); label.attr("data-selected", "en") } }); 索引:

FULLTEXT

然后执行natural language search

ALTER TABLE `tbl`
ADD FULLTEXT INDEX `full_name` (`firstname`, `lastname`)

使用绑定参数将SELECT users.*, MATCH(users.firstname, users.lastname) AGAINST (? IN NATURAL LANGUAGE MODE) AS relevance FROM users 替换为您的名称字符串。

由于此搜索将针对索引执行,因此对于大型数据集,它将比通配符字符串匹配快得多。