2012-12-07 25 views
1

我试图在我的数据库中搜索列'product','description'和'keywords'。问题在于,当我输入表格的'description'或'keywords'列中的一个单词时,而不是'product'列时,它不显示该结果。它只显示结果,如果我键入表中的'产品'列中的单词。mysql AND语句

我不确定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"; 
+2

眼下这个词必须是在描述,关键字,'和'产品领域,但它听起来像你想它是在任何字段(所以你应该使用'OR'来代替)。或者我不是在追问你在问什么? – Kitsune

回答

0

我想这3列

,所以你需要使用OR而不是AND中搜索词:

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

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

+0

我只是知道这件事很简单。谢谢。 –

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