【问题标题】:mysql AND statementmysql AND 语句
【发布时间】:2012-11-25 06:30:52
【问题描述】:

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

我不确定 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 产品字段中,但听起来你希望它出现在任何字段中(所以你应该使用 @ 987654323@ 代替)。还是我没有按照您的要求进行操作?

标签: php mysql match where-clause sql-like


【解决方案1】:

当我做这种事情时,我喜欢拆分我的逻辑,然后使用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

【讨论】:

    【解决方案2】:

    我想在这 3 列中搜索单词

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

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

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

    【讨论】:

    • 我只知道这很简单。谢谢。
    猜你喜欢
    • 2021-04-02
    • 2023-03-31
    • 2015-01-18
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多