Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查找带有多个标记的帖子_Php_Mysql - Fatal编程技术网

Php 查找带有多个标记的帖子

Php 查找带有多个标记的帖子,php,mysql,Php,Mysql,我正在做一个项目,其中项目的标签保存为计算机,windows,我希望这样,如果用户键入windows计算机,它将找到所有的职位都有计算机和windows 我尝试了“从帖子中选择”查询,其中“在”集中查找“:tags,tags”,array”:tags'=>query,我将query设置为$query=computer,windows;它返回0个结果,即使我有一个 为了将它从hashtags列表中删除,我想删除空格并替换为windows,这样我就可以拥有计算机了 在搜索时,我发现了其他问题,但它们

我正在做一个项目,其中项目的标签保存为计算机,windows,我希望这样,如果用户键入windows计算机,它将找到所有的职位都有计算机和windows

我尝试了“从帖子中选择”查询,其中“在”集中查找“:tags,tags”,array”:tags'=>query,我将query设置为$query=computer,windows;它返回0个结果,即使我有一个

为了将它从hashtags列表中删除,我想删除空格并替换为windows,这样我就可以拥有计算机了


在搜索时,我发现了其他问题,但它们似乎不支持我需要的内容,因为用户可以键入他们想要的任意数量的标签。其他人似乎想要固定数量的标签

// 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
代码说明:

首先,我们将所有标记存储在一个数组中。 接下来,对于每个标记,我们添加一个查询条件,如condition 接下来,我们将所有标记绑定为查询参数。 我们得到了结果
创建一个适当的关系表,将标记与POST关联起来,这很简单。如果您使用的是逗号分隔的值,则违反了of。另一个建议是为每个搜索词设置多个FIND_IN_关键字。@tadman所以我应该为标记创建一个表?至少一个。如果这是自由文本标签,那么您可以将其称为post_标签。如果是列表中的标记,则添加一个附加表,其中包含有效的标记,您可以称之为“表标记”。@Scuzzy我已经看到了这个问题,它们似乎有一定数量的值,我也尝试过,但似乎不起作用。这让我想到创建此DB::query“SELECT*”的方法,其中FIND_IN_set:tags,tags和FIND_IN_set:tag2,tags',array':tags'=>'windows',':tag2'=>'computer',但我不知道如何使它支持尽可能多的标记,因为它们键入了。为什么不像上面的代码那样创建一个循环呢。并将FIND_添加到_集合中:tag2,标签数量和标签数量一样多?我在帖子中写的代码运行良好。因为我测试过了。但是最常见的事情是为tags创建一个新表,那么posts表和tags表呢?标签表中会有什么?一起选择所有包含第一、第二和。。。标签或者选择至少有一个给定标记的帖子。这是组织标记的常用方法。这种关系被称为多对多。每个帖子可以有许多标签,每个标签可以属于许多帖子