gpt4 book ai didi

mysql - 改进MySQL相关文章查询

转载 作者:可可西里 更新时间:2023-11-01 08:48:34 25 4
gpt4 key购买 nike

对于相关主题列表,我使用了使用标签的查询。它显示 5 篇文章的列表,这些文章具有 1 个或多个共同标签并且比查看的文章更早。

是否可以编写一个查询,通过为具有 2,3,4... 共同标签的文章赋予更多权重来产生更相关的结果?

我在大致相同的主题上看到了这个主题: MySQL Find Related Articles

但它在共同标签少于 3 个的情况下产生 0 个结果

我现在使用的查询:

SELECT DISTINCT
AAmessage.message_id, AAmessage.title, AAmessage.date
FROM
AAmessage
LEFT JOIN
AAmessagetagtable
AS child ON child.message_id = AAmessage.message_id
JOIN AAmessagetagtagtable
AS parent ON parent.tag_id = child.tag_id
AND
parent.message_id = '$message_id'
AND AAmessage.date < '$row[date]'
ORDER BY
AAmessage.date DESC LIMIT 0,5

使用表格:

AAmessage (message_id, title, date...)

AAmessagetable (key, message_id, tag_id)

AAtag (tag_id, tag.... not used in this query but needed to store names of tags)

最佳答案

首先,请原谅我为了便于阅读将表名更改为 messagemessage_tag

其次,我没有对此进行测试。将其用作一个指针而不是一个明确的答案。

该查询使用了两个子查询,效率可能不高,可能还有改进的空间。首先,最内层查询查找当前消息的标签。然后,中间查询查找标有至少一个公共(public)标签的消息。分组用于获取唯一的 message_id 并按公共(public)标签的数量对它们进行排序。最后,JOIN 用于加载其他详细信息并过滤掉旧消息。

您可能注意到我使用了问号而不是 '$xyz'。这是为了避免转义变量内容。

SELECT message_id, title, date
FROM message
RIGHT JOIN (SELECT message_id, COUNT(*)
FROM message_tag
WHERE tag_id IN
(SELECT MT.tag_id FROM message_tag MT WHERE MT.message_id = ?)
GROUP BY message_id
ORDER BY COUNT(*) DESC) RELATED_MESSAGES
ON message.message_id = RELATED_MESSAGES.message_id
WHERE date < ?

关于mysql - 改进MySQL相关文章查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20783136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com