【问题标题】:MySQL search is too "loose" [closed]MySQL搜索太“松散”[关闭]
【发布时间】:2016-06-02 08:39:50
【问题描述】:

好的,所以我创建了一个网站,只是为了我正在做的一个项目。在这个网站上,我有这个数据库,上面有几篇文章,我使用这段代码进行查询:

<?php
if (!empty($_REQUEST['term'])) {

    $term = mysql_real_escape_string($_REQUEST['term']);     

    $sql = "SELECT * FROM articles WHERE title LIKE '%".$term."%'"; 
    $r_query = mysql_query($sql);

    while ($row = mysql_fetch_array($r_query)){ 
        echo $row['title'];
        echo $row['summary'];        
        echo $row['content']; 
        echo $row['publicationDate']; 

    }  

}
?>

问题在于搜索有点过于“松散”。该站点连接的数据库有许多文章。我不喜欢的是说我在搜索框中搜索了字母“A”,它会在任何文章标题中出现字母“A”的任何实例。因此,澳大利亚、奥地利、阿富汗甚至厄瓜多尔没有出现字母“A”的文章。这有点令人沮丧。你能帮帮我吗?

【问题讨论】:

  • 删除第一个 %.... "SELECT * FROM 文章 WHERE title LIKE '$term."%'";
  • 这不是 PHP 搜索,而是 SQL 查询。
  • $sql = "SELECT * FROM articles WHERE title LIKE $term.'%'";

标签: php mysql search


【解决方案1】:

您可以尝试强制它成为字符串的开头或单词的开头:

$sql = "SELECT * FROM articles WHERE title LIKE '% ".$term."%' OR title LIKE '".$term."%'";

【讨论】:

  • 这并不能真正回答问题,更多的是评论,而且不正确。在 OR 之后是一个语法错误,OR .. LIKE 'term%'LIKE '%term%' 之后不会做任何事情。
  • 有了这段代码,它只会接受以term开头的单词或字符串,所以结果会更准确吗?第二个 OR .. LIKE 'term%' 正在做某事,因为第一次检查中的术语前有空格。顺便提一句。我在 OR 之后添加了 LIKE(只是一个简单的疏忽)。
  • 啊,我看到你那里有多余的空间。仍然没有回答这个问题,因为这不是他们所问的,他们所问的仍然很不清楚。但显然他们不想要以“A”开头的东西。
  • 我猜你的作品。它大大减少了显示的结果数量。
  • 如果您需要更多合格的结果,您应该考虑使用弹性搜索或类似的搜索系统。
猜你喜欢
  • 2012-03-07
  • 1970-01-01
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
  • 2011-10-12
  • 1970-01-01
相关资源
最近更新 更多