我们的数据库中有2个文本字段('post_text'&'post_slug')。 比方说,post_text =“Hello World!”,所以它的post_slug =“hello-world”。 如何实现相关的帖子功能而不标记每个只运行现有字段的帖子? (PHP,MySQL)
P.S。数据库包含很多帖子。
答案 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