簡體   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