[我试图找出如何对具有匹配标签的商品进行排序,而不是通过匹配标签的数量,而是通过标签的总价值,每个标签的重要性都不同,这取决于其性质。
我有2个MySQL表:
articles(article_id,content)
1 | Lorem ipsum dolor sit amet, consectetur adipiscing (...)
2 | Elit, sed do eiusmod tempor incididunt ut (...)
3 | Labore et dolore magna aliqua. Ut enim ad minim (...)
4 | Veniam, quis nostrud exercitation ullamco (...)
5 | Laboris nisi ut aliquip ex ea commodo consequat (...)
tagging(article_id,tag,type,value)
1 | Science | Main category | 1
1 | Physics | Sub category | 2
1 | Aristotle | Entity | 3
2 | Science | Main category | 1
2 | Biology | Sub category | 2
3 | Science | Main category | 1
3 | Physics | Sub category | 2
3 | Einstein | Entity | 3
3 | Newton | Entity | 3
3 | Galileo | Entity | 3
4 | Art | Main category | 1
4 | Music | Sub category | 2
5 | Philosophy | Main category | 1
5 | Metaphysics | Sub category | 2
5 | Newton | Entity | 3
5 | Einstein | Entity | 3
文章可以具有任意数量的标签,标签可以是Main category
,Sub category
和Entity
3种类型中的任何一种,但是标签的类型不同,其值也不同(Main category
= 1,Sub category
= 2和Entity
= 3)。
我需要通过至少一个匹配标签(即最小值1)找到与article_id = 3
相关的所有文章,并以最佳匹配的顺序返回结果。
[这里,article_id = 5
应该位于第一位,article_id = 1
其次,article_id = 2
第三位,并且article_id = 4
完全不显示:
article_id = 5 [2 matching tags; total value = 6 (3+3)]
article_id = 1 [2 matching tags; total value = 3 (1+2)]
article_id = 2 [1 matching tag; total value = 1 (1)]
article_id = 4 [0 matching tag; total value = 0 (0)]
这是我现在拥有的,我认为这是根据匹配的标签数而不是标签的总值来排序的:
SELECT t1.article_id, Count(t1.tag) AS tag_count
FROM tagging AS t1
INNER JOIN tagging AS t2 ON t1.tag = t2.tag
WHERE t2.article_id = 3
GROUP BY t1.article_id
HAVING t1.article_id != 3
ORDER BY Count(t1.tag) DESC;
这是一篇相当长的文章,非常感谢您的阅读。如果需要任何说明,我将进行编辑。
您似乎缺少表: