Mysql搜索在PHP结尾有额外字符的单词/句子
目前我有一个搜索句子/单词的查询,它的效果几乎与预期一样 我有一个正则表达式,可以在表中搜索名称,expample:Mysql搜索在PHP结尾有额外字符的单词/句子,php,mysql,regex,pattern-matching,Php,Mysql,Regex,Pattern Matching,目前我有一个搜索句子/单词的查询,它的效果几乎与预期一样 我有一个正则表达式,可以在表中搜索名称,expample: function getNames($str){ $stmt = "SELECT * FROM users WHERE name = :name OR name REGEXP :reg1 OR name REGEXP :reg
function getNames($str){
$stmt = "SELECT * FROM users WHERE name = :name
OR name REGEXP :reg1
OR name REGEXP :reg2
OR name LIKE :lik1";
$query = self::$connection->prepare($stmt);
$query->execute(array(":name"=>$str,
":reg1"=>"^$str" . "[a-zA-Z\s]*$",
":reg2"=>"^[a-zA-Z]*[\s]*[$str][a-zA-Z]"
":lik1"=>"%" . $str . "%"
));
return $query->fetchAll(PDO::FETCH_ASSOC);
}
假设我的表包含以下值
- 鲍勃
- 彼得
- 标记
- 大卫
- 约翰
Bob
作为$name
值运行查询,它会得到它,但我希望在使用bobsomeletsextra
或Bob something
作为$name
值运行查询时能够找到Bob
有没有一种方法可以使用
REGEXP或类似的方法来实现这一点 您可以在下面尝试使用where
子句查询LIKE
:
"SELECT * FROM users WHERE name = ".$name." OR name LIKE '%".$name."%' OR name REGEXP ^".$name."[a-zA-Z]*$"
上面的查询应该足以得到结果。在向表中输入数据之前,您应该验证数据。如果没有,请同时使用正则表达式
"SELECT * FROM users WHERE name LIKE '%".$name."%' AND REGEXP ^".$name."[a-zA-Z]*$"
更新
对不起,如果我误解了这个问题,请尝试这个
"Select * from users WHERE '".$name."' LIKE CONCAT(name , '%')"
嗯,我对它进行了测试,但没有发现任何结果,我甚至尝试直接从phpmyadmin执行查询(显然是在更改变量和所有需要更改的内容)@heriberto juarez,我更新了查询,忘记添加或,您可以再次测试,也可以显示您的代码吗?如果我能帮你的话。@HeribertoJuarez,你想要多少个字符作为第一个字符?例如,按前3个字符搜索等。。。我也在寻找。。一旦我找到它,就告诉你。如果我的数据库表值类似于Bobb,那么这会起作用,我会运行如下查询:SELECT*FROM users,其中名称类似“%Bob%”将返回Bobb,但我的问题是表中的值是Bob,用户输入是Bobb,无论如何,谢谢你的帮助try@HeribertoJuarez很快我误解了这个问题。。检查更新的答案谢谢,更新的答案非常好,非常感谢你的时间和关注
"Select * from users WHERE '".$name."' LIKE CONCAT(name , '%')"