我正在开发一个项目,其中项目有标记保存为“计算机,窗口”我希望如此,如果用户输入“#Windows #Computer”,它将找到所有同时包含计算机和窗口的帖子
我尝试了query('SELECT * FROM posts WHERE FIND_IN_SET(:tags , tags)', array(':tags' => $query))
并将查询设置为$query = "computer,windows";
,即使我有一个也会返回0结果。
为了从主题标签到列表,我想删除空格并将“#”替换为“,”所以我可以拥有“计算机,窗口”
在搜索时我发现了其他问题,但它们似乎不支持我需要的东西,因为用户可以输入他们想要的任何数量的标签,其他人似乎想要一定数量的标签
答案 0 :(得分:1)
这样做:(我将用PDO制作)
// create a array of tags :
$arrayOfTags = [
'computer',
'windows',
'another',
];
$query = 'SELECT * FROM posts WHERE ';
// as much tags add ? to query
$first = true;
for($i = 0; $i < count($arrayOfTags); ++$i) {
if($first == true){
$query .= "tags LIKE ? ";
}else{
$query .= "AND tags LIKE ? ";
}
$first = false;
}
// ad '%' to the beginning and the end of each tag name
$arrayOfTags = array_map(function($value){
return '%'.$value.'%';
} , $arrayOfTags);
// prepare and execute the query
$stmt = $conn->prepare($query );
$stmt->execute($arrayOfTags);
//fetch the result
代码说明: