给出三个表(文章,文章标签,标签)......
通常,"相关文章按标签"根据他们匹配的原始文章标签的多少来排名。因此,如果原始文章包含TagA,TagB和TagC的标签,那么任何具有所有三个标签的相关文章将首先显示,并根据匹配的标签数量向下滴,在该数据点之后没有订单。
我想要做的是增加典型行为之后发生的行为。
如果原始文章的TagA位于优先级 1,TagB位于优先级 2,而TagC位于优先级 3,则订单仍应支持更多数量的匹配标签,但随后采用上述优先级:共享TagA(优先级1)的文章应首先出现;共享TagB的文章应该是下一个;分享TagC的文章应该是最后的。
SELECT a.*
FROM articles a
JOIN (
SELECT articleID, SUM(at.priority) total_priority
FROM articleTags at
JOIN tags t ON at.tagid = t.tagID
WHERE t.tagName IN ('TagA','TagB','TagC')
GROUP BY articleID
) q ON a.articleID = q.articleID
ORDER BY q.total_priority
这是我到目前为止所建立的,但它似乎并没有给我我需要的结果。
更新
只是为了抛出一些东西,让我们说我们有四篇文章:
我如何存储并检索它,以便在搜索 TagA 和 TagB 时,我会按此顺序获得此输出:
基本上,虽然这个例子是原始的,但它说明了需要推广B条,因为在编辑的选择和标签的优先级方面,B条与TagB的关系比条款E与标签A的关系更为明显。 / p>
希望这有帮助。