查找包含多个代码的帖子

时间:2018-02-25 20:52:40

标签: php mysql

我正在开发一个项目,其中项目有标记保存为“计算机,窗口”我希望如此,如果用户输入“#Windows #Computer”,它将找到所有同时包含计算机和窗口的帖子

我尝试了query('SELECT * FROM posts WHERE FIND_IN_SET(:tags , tags)', array(':tags' => $query))并将查询设置为$query = "computer,windows";,即使我有一个也会返回0结果。

为了从主题标签到列表,我想删除空格并将“#”替换为“,”所以我可以拥有“计算机,窗口”

在搜索时我发现了其他问题,但它们似乎不支持我需要的东西,因为用户可以输入他们想要的任何数量的标签,其他人似乎想要一定数量的标签

1 个答案:

答案 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

代码说明:

  1. 首先,我们将所有标签存储在一个数组中。
  2. 接下来,对于每个标记,我们添加一个查询条件(如条件)
  3. 接下来,我们将所有标签绑定为查询参数。
  4. 我们得到了结果