一尘不染

PHP SQL SELECT,其中像带有多个单词的搜索项

mysql

我有一个选择,像查询seach形式,如下所示:

<?php 
$bucketsearch = sanitizeone($_POST["bucketsearch"], "plain");
$bucketsearch = strip_word_html($bucketsearch);
?>

 if(isset($_POST['search'])){
                  $result=MYSQL_QUERY( "SELECT * FROM buckets where bucketname like '%$bucketsearch%' order by bucketname");
              }else{
              $result=MYSQL_QUERY( "SELECT * FROM buckets order by bucketname");
          }

我的问题是,如果有人搜索“苹果和梨”,那么我没有得到任何包含任何单词的结果,我只能使其返回包含所有单词的结果(1个结果)。

任何人都可以帮助我进行更多搜索吗?提前致谢。


阅读 232

收藏
2020-05-17

共1个答案

一尘不染

因此,您想要使用输入的每个单词而不是确切的字符串进行AND搜索吗?大概是这样的:

$searchTerms = explode(' ', $bucketsearch);
$searchTermBits = array();
foreach ($searchTerms as $term) {
    $term = trim($term);
    if (!empty($term)) {
        $searchTermBits[] = "bucketname LIKE '%$term%'";
    }
}

...

$result = mysql_query("SELECT * FROM buckets WHERE ".implode(' AND ', $searchTermBits).");

这将给您一个查询,例如:

SELECT * FROM buckets WHERE bucketname LIKE '%apple%' AND bucketname LIKE '%and%' AND bucketname LIKE '%pear%'

如果要匹配任何搜索词而不是全部搜索词,请将AND更改为OR。进一步的改进可能涉及定义一些停用词,例如“和”,以提供更好的结果。

2020-05-17