如何在不标记每个帖子的情况下实现相关帖子功能?

时间:2009-05-19 12:14:39

标签: php mysql

我们的数据库中有2个文本字段('post_text'&'post_slug')。 比方说,post_text =“Hello World!”,所以它的post_slug =“hello-world”。 如何实现相关的帖子功能而不标记每个只运行现有字段的帖子? (PHP,MySQL)

P.S。数据库包含很多帖子。

2 个答案:

答案 0 :(得分:3)

请注意:您绝对不希望每次显示页面时都能动态计算相关帖子,因为在大型数据库中,工作量太大而且不可能。

您通常会定期运行您正在使用的任何算法,并将信息保存在引用原始表的单独表中。显示帖子只是一个简单的连接。

答案 1 :(得分:1)

查看similar_text函数 http://jp2.php.net/manual/en/function.similar-text.php

或者可以用空格分割每个单词,并用你自己的算法计算关系。

如果你能够向mysql添加一个表,你应该创建一个包含每个帖子的计算关系的表。

CREATE TABLE blog_table.`posts_relation` (
`post_id` INT UNSIGNED NOT NULL ,
`related_post_id` INT UNSIGNED NOT NULL ,
`relation` FLOAT UNSIGNED NOT NULL ,
INDEX ( `post_id` , `related_post_id` ) 
)

每次添加帖子时更新,或者每天更新一次。

并使用

之类的内容获取结果
SELECT posts.* FROM posts, posts_relation WHERE posts_relation.post_id = {$post_id} AND posts.post_id = posts_relation.related_post_id ORDER BY posts_relation.relation DESC LIMIT 5