MYSQL / PHP:选择单词的一部分或完全匹配

时间:2017-02-28 09:52:33

标签: mysql sql select

试图寻找我的问题的答案。如果有人问过类似的问题,请指出我的页面。

我有一个表单,用户在一个或多个文本字段中输入搜索字词。

然后传递给SQL语句:

WHERE st.Description LIKE '%$Description%'
AND st.Number LIKE '%$Number%'
AND st.Color LIKE '%$Color%'

这将返回包含用户输入字词的所有匹配项。

有没有办法,如果用户使用引号(如“搜索词”),它会搜索完全匹配?

什么是最佳做法?

2 个答案:

答案 0 :(得分:0)

在排除查询之前,您可以从php代码中执行此操作

假设serch字在一个名为$keyword

的变量中
<?php 
if(substr($keyword, 0, 1) == '"' && substr($keyword, -1, 1) ==='"'){
    $search = ' = ' . substr($keyword, 1, -1);
}else{
    $search = ' LIKE ' . '%' . $keyword . '%';
}

然后在查询中使用$search变量

<?php
  $sql = ... WHERE st.Description $search and  st.Number $search and  st.Color $search

不要忘记使用预准备语句来阻止SQL injections

对于性能问题,如果您要查找确切的字词,请勿使用LIKE关键字,请使用=比较符号

答案 1 :(得分:0)

  

有没有办法,如果用户使用引用(例如&#34;搜索词&#34;)它会搜索完全匹配?

如果您删除的引号与其搜索的内容完全相同:options。这意味着当您提供多个单词作为搜索词时,您认为当前正在搜索无序词的存在。不是这种情况。假设您想要搜索所有单词的多个单词的短语:

org.antlr.runtime.Lexer
  

什么是最佳做法?

非常远离您当前正在做的事情:使用全文索引或构建您自己的关键字搜索。