通过标签查找相关项目


Find Related Items Though Tags

如何将其制作成一个MySQL查询字符串,以通过格式"tag1,tag2,tag3"查找相关项目?上面的代码一团糟,将为此使用太多的资源。也许有更好的解决方案。感谢

$related = [];
$q = mysql_query("select tags from items");
while($row = mysql_fetch_assoc($q)){
$tags = $row['tags']; //format: tag1,tag2,tag3
$split = explode(",",$tags);
foreach ( $split as $tag):
    $find = mysql_query("select * from items where tags = '".$tag."'");
    $again = mysql_fetch_assoc($find);
    $related[] = $again;
endforeach;
echo "Found related:<br>";
print_r($related);
}

使用mysql find_in_set()函数。它是这样工作的。

SELECT * FROM items WHERE FIND_IN_SET(tag1,tag2,tag3) > 0;

由于传入的输入已经是命令分隔的,所以您所需要做的就是添加引号。

$tags = $row['tags']; //format: tag1,tag2,tag3
$set = "'".implode("','", $tags)."'";
$sql = "SELECT * FROM items WHERE FIND_IN_SET(" . $set . ") > 0);

您可以按顺序检索它们,从而消除代码中几个查询的需要:

SELECT * FROM items ORDER BY tags ASC;

您只需要跟踪上一个tags,这样就可以知道何时开始使用下一个标记。