gpt4 book ai didi

php - 多对多关系标签匹配?

转载 作者:可可西里 更新时间:2023-11-01 08:54:41 26 4
gpt4 key购买 nike

我有一个艺术网站。我现在需要展示相关的艺术作品。我有 3 个表:

art_info             : art_id, title  
art_tag_relationship : art_id, tag_id
art_tags : tag_id, tag (in text)

我正在尝试获取按最相关标签匹配排序的给定艺术作品的相关艺术。

现在假设我有 5 件带标签的艺术作品

艺术 #1 标签:红色、蓝色、绿色、黄色
艺术 #2 标签:红色、橙色、紫色、黑色、黄色、蓝色
艺术 #3 标签:红色
艺术 #4 标签:蓝色、绿色
艺术 #5 标签:白色、棕色

所以现在我想按照最匹配到最不匹配的顺序获取与艺术 #1 最相关的艺术作品。我希望得到这样的结果

#1 的相关技术:

  • 最佳匹配 = 艺术 #2(因为它匹配 3 个标签)
  • 第二场比赛 = 艺术 #4(因为它匹配 2 个标签)
  • 第 3 场比赛 = 艺术 #3(因为它匹配 1 个标签)
  • 不显示艺术 #5,因为未找到匹配项。

我曾考虑在获得 art#1 的标签后使用 foreach 语句,但这似乎效率不高。

这是我用来获取艺术 #1 标签的查询

SELECT art_info.art_id, art_info.title
FROM art_info
INNER JOIN art_tag_relationship ON art_info.art_id = art_tag_relationship.art_id
WHERE art_tag_relationship.art_id = '1'

那么现在,一旦我从艺术 #1 中获得了 4 个标签,我该如何获得具有最相关标签的最多艺术?

感谢您花时间和用脑。

编辑:概念似乎是,通过 art_tag_relationship -> art_tags 获取艺术 #1 的标签,然后从 art_tag_relationships 获取 art_id,其中 tag_id 与在 art_tag_relationships 中为 art_id #1 找到的标签相同。

最佳答案

给定另一个 art_id,您可以选择最相关的艺术作品。

SELECT 
ai.art_id,
ai.title
count(DISTINCT r2.tag_id) as relevance
FROM art_tag_relationship r1
INNER JOIN art_tag_relationship r2 ON (r1.tag_id = r2.tag_id
AND r1.art_id <> r2.art_id)
INNER JOIN art_info ai ON (r2.art_id = ai.art_id)
WHERE r1.art_id = '1' -- this is the art_id results should be related to.
GROUP BY ai.art_id
ORDER BY relevance DESC

关于php - 多对多关系标签匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7226123/

26 4 0