Php mysql和语句
我正在尝试搜索数据库中的“产品”、“说明”和“关键字”列。问题是,当我输入的单词位于表的“description”或“keywords”列中,但不在“product”列中时,它不会显示该结果。仅当我在表的“产品”列中键入一个单词时,它才会显示结果 我不确定AND语句是否符合我的要求。我想在这3列中搜索与用户搜索内容相似的单词,并根据相关性对结果进行排序。任何帮助都将不胜感激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
$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);