1

我正在尝试在我的数据库中搜索“产品”、“描述”和“关键字”列。问题是,当我在表格的“描述”或“关键字”列中输入一个单词时,而不是在“产品”列中,它不会显示该结果。如果我在表格的“产品”列中键入一个单词,它只会显示结果。

我不确定 AND 语句是否在做我想要的。我想在这 3 列中搜索与用户搜索“类似”的单词,并按相关性对结果进行排序。任何帮助,将不胜感激。

$search_exploded = explode(" ",$searchquery);

foreach($search_exploded as $search_each)
{
    $x++;
    if ($x==1)
        $construct .= "product LIKE '%$search_each%' AND description LIKE '%$search_each%' AND keywords LIKE '%$search_each%'";
    else
        $construct .= " OR product LIKE '%$search_each%' AND description LIKE '%$search_each%' AND keywords LIKE '%$search_each%'";
}

$sqlCommand = "SELECT * FROM Search WHERE $construct ORDER BY MATCH (product,description,keywords) AGAINST ('$searchquery') DESC";
4

2 回答 2

0

我想在这 3 列中搜索单词

所以你需要使用OR而不是AND

product LIKE '%$search_each%' OR description LIKE '%$search_each%' OR keywords LIKE '%$search_each%'

如果用户搜索的单词在三列中的任何一列中,这将显示结果。

于 2012-12-07T04:41:48.717 回答
0

当我做这种事情时,我喜欢拆分我的逻辑,然后使用implode(). 就像是:

$searchTerms = explode(" ",$searchquery);

$clauses = array();

foreach ($searchTerms as $searchTerm)
{
    $subClauses = array();
    $columns = array("product", "description", "keywords");
    foreach ($columns as $column)
    {
        $subClauses[] = " $column LIKE '%$searchTerm%' ";
    }

    $clauses[] = "(" . implode(" OR ", $subClauses) . ")";
}

$query = implode(" AND ", $clauses);

我发现这样的逻辑更容易理解。在这里,我们是说:对于每个搜索词,必须在product列或description列或列中找到匹配项keywords

这是在行动:http ://eval.in/4335

于 2012-12-07T04:50:09.553 回答