Php 查找带有多个标记的帖子
我正在做一个项目,其中项目的标签保存为计算机,windows,我希望这样,如果用户键入windows计算机,它将找到所有的职位都有计算机和windows 我尝试了“从帖子中选择”查询,其中“在”集中查找“:tags,tags”,array”:tags'=>query,我将query设置为$query=computer,windows;它返回0个结果,即使我有一个 为了将它从hashtags列表中删除,我想删除空格并替换为windows,这样我就可以拥有计算机了Php 查找带有多个标记的帖子,php,mysql,Php,Mysql,我正在做一个项目,其中项目的标签保存为计算机,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表呢?标签表中会有什么?一起选择所有包含第一、第二和。。。标签或者选择至少有一个给定标记的帖子。这是组织标记的常用方法。这种关系被称为多对多。每个帖子可以有许多标签,每个标签可以属于许多帖子