【问题标题】:Match nearest string to a particular string将最近的字符串匹配到特定的字符串
【发布时间】:2016-08-06 11:30:48
【问题描述】:

当用户搜索书名时,我应该使用什么搜索算法来给出结果?

如果存在应该返回书名的书,否则必须显示靠近它的书名。

第一种情况更容易搜索一个字符串。我需要如何解决大多数网站使用的第二种情况。

books 表包含字段类别、类别和标题。我已经尝试了下面的代码,当我给出确切的标题时我得到了结果我希望系统给出密切相关的标题。

$title=isset($_GET['title'])?$_GET['title']:NULL;
      //$code=isset($_GET['code'])?$_GET['code']:NULL;
      $class=isset($_GET['class'])?$_GET['class']:NULL;
      $cat=isset($_GET['category'])?$_GET['category']:NULL;
      if(isset($title))
      $qry="select * from books where quantity>0 and title='$title' ";
      else{
          $qry="select * from books where quantity>0 ";
          if(isset($class)) $qry.=" and class='$class' ";
          if(isset($cat))   $qry.=" and category='$cat' ";
      }

【问题讨论】:

  • 书名是如何存储的?它们存储在哪里?你已经尝试过什么?我们不是来喂的。
  • @Stah 我已经添加了我尝试过的内容。

标签: php string-matching


【解决方案1】:

好吧,首先我建议使用准备好的语句来避免通过当前代码进行 SQL 注入,但是在 SQL 中使用 LIKE 运算符应该适用于第二种情况。

改变

`select * from books where quantity > 0 and title = '$title'`

`select * from books where quantity > 0 and title LIKE '%$title%'`

它的作用是检查单词周围的缺失字母。所以如果title等于“rabbit”,那么“White rabbit”、“The Rabbit”和“Rabbit”都会是结果。

附言空白不花钱

【讨论】:

  • 好的。如果用户输入“rabit”(错字),那么如何显示所有相关书籍?
  • SQL 中没有内置的方法来执行此操作。查看stackoverflow.com/questions/487003/…
  • 如何根据空格划分title中的单词并逐个搜索?
  • $words = explode(" ", $title); 并搜索每个单词,或者将它们组合成一个语句并使用sql contains()。
  • 如何根据最好的排序(基于几乎完全匹配)首先
猜你喜欢
  • 2017-03-29
  • 1970-01-01
  • 2019-01-28
  • 2011-08-17
  • 1970-01-01
  • 2019-08-01
  • 2011-05-11
  • 2017-07-13
  • 2014-07-12
相关资源
最近更新 更多