繁体   English   中英

获取所有相关标签?

[英]get all related tags?

这非常棘手。 我有一个包含2列thread_tag_map的表:thread_id和tag_name。

  thread_id tag_name
  1         football
  1         manchester
  2         manchester
  2         england
  3         england
  3         queen
  4         queen
  4         diana

如您所见,一个线程可以有多个标签,这给了我们标签的链接效果。

如果您键入足球标签,我希望它显示与足球相关的所有标签。 也就是说曼彻斯特,英国,皇后和戴安娜。

因此,这是我到目前为止编码的内容:

    // get all thread_id:s for tag_name
    $query = "SELECT *
            FROM thread_tag_map
            WHERE tag_name = 'football'";

    $result1 = mysqli_query($conn, $query) or die ("Couldn't execute query: " . mysqli_error($conn));

    // get all tag_name:s for each thread_id
    while($row = mysqli_fetch_assoc($result1))
    {
        $thread_id = $row['thread_id'];

        $query = "SELECT *
                FROM thread_tag_map
                WHERE thread_id = $thread_id";

        $result2 = mysqli_query($conn, $query) or die ("Couldn't execute query: " . mysqli_error($conn));

    // add each tag to array
    while($row = mysqli_fetch_assoc($result2))
    {
        $tag_array[] = $row['tag_name'];
      }
   }

但这给了我足球和曼彻斯特。 我不知道如何继续使它成为循环播放(循环)的好代码。 也许有100个相关标签。

我想你明白这个主意。 有人做过这个吗?

您可以在这里用图论来形式化您要尝试做的事情。 您希望将所有连接的节点连接到给定的节点,并给出一个邻接列表(排序)。 为此,您需要对图形进行广度优先搜索。 这对于避免循环很重要。

尽管您选择的表示形式并不完全有效,但是肯定可以。

在伪代码中,您的算法应如下所示:

interesting-tags = input-tag
output = empty
for tag in interesting-tags:  (Must be in order)
    select related-tags to tag
    for newtag in related-tags:
        if newtag is not in output:
             append newtag to interesting-tags and output

return output

因此,在这里,有趣的标签应该是队列的某种形式,因为您需要在后面添加新项目,并从前面获取它们。

输出应该是Set数据类型,因为您需要检查集合中是否已存在并添加它们。

但是,我不熟悉PHP,所以我不知道有什么可用。 至少,您可以只用一个数组来实现所需的操作,即使它可能不是完全有效的,它也适用于一些标签。

如果您要构建某种类型的论坛/讨论板,并且用相关标签来表示所有与委员会/论坛相关的主题中发布的标签,那么将它们全部选中会不会更容易? 由于您是基于线程创建标签的,因此应该正确放置所有标签,因此您只需要全部获取它们。

另外,我建议您为此目的创建一个临时表,首先将“相关标签”存储在其中,然后将其保存在该表中以供将来搜索,并在需要时对其进行更新单词作为标签给出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM