根据匹配的标签的总值订购匹配标签的项目

问题描述 投票:0回答:1

[我试图找出如何对具有匹配标签的商品进行排序,而不是通过匹配标签的数量,而是通过标签的总价值,每个标签的重要性都不同,这取决于其性质。

我有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 categorySub categoryEntity 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;

这是一篇相当长的文章,非常感谢您的阅读。如果需要任何说明,我将进行编辑。

mysql
1个回答
0
投票

您似乎缺少表:

© www.soinside.com 2019 - 2024. All rights reserved.