0

我正在布尔模式下使用 MATCH 和 AGAINST 执行搜索查询,并且我将关键字存储在 ARRAY 中以显示它们像 TAGS,当我 IMPLODE 数组值以构造查询语句时它工作正常,但我想保留 BOLEAN 功能搜索,如“完全匹配”或其他特殊字符。

当数组值带有空格时是否可以插入引号?

INPUT: keyword1 keyword2 "exact match" keyword3

Covert to this array:
$keywords = array(
    [0] = "keyword1",
    [1] = "keyword2",
    [2] = "exact match", <-- This came with quotes so is stored as a phrase
    [3] = "keyword3"
);

然后我需要使用 implode 转换为 SQL 语句:

$SQL  = "SELEC field WHERE MATCH(keywords) AGAINST('";
$SQL .= implode(" ", $keywords);
$SQL .= "' IN BOOLEAN MODE)";

我尝试使用 ARRAY_FILTER() 但它只区分一个而不是另一个:

function words($var){
    return preg_match('/\s/', $var);
}

$SQL  = "SELEC field WHERE MATCH(keywords) AGAINST('";
$SQL .= implode(" ", array_filter($keywords, 'words'));
$SQL .= "' IN BOOLEAN MODE)";

//example above only outputs: exact match

我的目标是在值带有两个以上单词时区分数组值,该函数为值添加引号

Expected Output:

$SQL = "SELECT field WHERE MATCH(keywords) AGAINST('keyword1 keyword2 "exact match" keyword3' IN BOOLEAN MODE)";

非常感谢你的帮助

4

0 回答 0