所以我试图获取一个搜索字符串(可能是任意数量的单词)并将每个值转换为一个列表,以便在下面的IN语句中使用)此外,我需要计算所有这些值以用于我的计数过滤
$search_array = explode(" ",$this->search_string);
$tag_count = count($search_array);
$db = Connect::connect();
$query = "select p.id
from photographs p
left join photograph_tags c
on p.id = c.photograph_id
and c.value IN ($search_array)
group by p.id
having count(c.value) >= $tag_count";
Run Code Online (Sandbox Code Playgroud)
这目前没有结果,任何想法?
解:
$search_array = explode(" ",$this->search_string);
foreach ($search_array as $key => $value) {
$new_search_array[] = "'$value'";
}
$search_string = implode(',', $new_search_array);
Run Code Online (Sandbox Code Playgroud)
这给了我一个逗号分隔的列表
$search_array = implode(",", $search_array);
Run Code Online (Sandbox Code Playgroud)
因为IN采用逗号分隔的值列表.(但是你需要确保引用$ search_array的内容,如果它们是单词的话.)
一步完成可能如下所示:
function quoteAndComma($result, $each) {
return $result . ', "'.$each.'"';
}
$search_array = array_reduce($search_array, "quoteAndComma", '');
Run Code Online (Sandbox Code Playgroud)