一尘不染

使用PHP和MySQL创建相关或相似的帖子

mysql

我一直在寻找SO,并且想知道如何使用PHP和MySQL创建相关或相似的帖子以显示在我的网站上?如何执行此操作的基本示例是什么?


阅读 204

收藏
2020-05-17

共1个答案

一尘不染

使用MySQL全文搜索的MATCH (col1,col2,...) AGAINST (expr [search_modifier])东西。

假设您的表格是articles,您需要查找有关当前职位标题的相关职位。像这样做:

SELECT *, MATCH(title, body) AGAINST('$CurrentPostTitle') AS score
FROM articles 
WHERE MATCH(title, body) AGAINST('$CurrentPostTitle') 
ORDER BY score DESC LIMIT 5

这将为您提供前5条相关的帖子。

但是首先请记住通过运行以下查询为该表的列启用全文搜索:

ALTER TABLE articles ADD FULLTEXT (title, body);

[编辑]:为什么不使用 LIKE对OP的说明:

因为它不会给出正确的结果。假设您当前的标题是“ 1980年的音乐”,并且您想要与此相关的文章。现在,如果您使用的是,LIKE则仅会显示包含“ Music
of 1980”一词的序列的帖子。但是,如果使用MATCH ... AGAINST,则将出现包含Music OR
1980的帖子。另外,同时包含Music和1980的帖子将出现在Top上,因为它给SCORE每个结果都给出一个`` a’‘
,我们正在按该分数排序。我希望这很清楚。

[编辑]:2

如果您有类别,则可以添加AND Category = '$CurrentCategory'SQL查询where clause以获得更具体的结果。

[编辑]:3:OP无法使用全文

如果由于某种原因不能使用全文,则可以只显示5个来自同一类别的随机信息。由于它们属于同一类别,因此它们至少在某种程度上相关:

SELECT *
FROM articles 
WHERE Category = '$CurrentCategory'
LIMIT 5

编辑语法:在MySQL代码中将LIMTI更改为LIMIT

2020-05-17