Php mysql和语句

Php mysql和语句,php,mysql,match,where-clause,sql-like,Php,Mysql,Match,Where Clause,Sql Like,我正在尝试搜索数据库中的“产品”、“说明”和“关键字”列。问题是,当我输入的单词位于表的“description”或“keywords”列中,但不在“product”列中时,它不会显示该结果。仅当我在表的“产品”列中键入一个单词时,它才会显示结果 我不确定AND语句是否符合我的要求。我想在这3列中搜索与用户搜索内容相似的单词,并根据相关性对结果进行排序。任何帮助都将不胜感激 $search_exploded = explode(" ",$searchquery); foreach($searc

我正在尝试搜索数据库中的“产品”、“说明”和“关键字”列。问题是,当我输入的单词位于表的“description”或“keywords”列中,但不在“product”列中时,它不会显示该结果。仅当我在表的“产品”列中键入一个单词时,它才会显示结果

我不确定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";
我想在这三列中搜索单词

因此,您需要使用或代替AND:


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

当我做这类事情时,我喜欢将我的逻辑拆分,然后使用内爆将各个部分粘在一起。比如:

$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列中找到匹配项


这就是它的作用:

现在这个词必须出现在描述、关键字和产品字段中,但听起来你希望它出现在任何字段中,所以你应该使用OR。还是我没听懂你的意思?我就知道事情就是这么简单。非常感谢。
$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);