使用mysql查找相关项目?

时间:2010-10-18 20:35:25

标签: php mysql

我试图弄清楚如何使用mysql&找到相关的主题项目php,这是我的主题表

topics{id, topic, founder,vote_up, vote_down date}

例如,我说我在php

的主题页面上
topic {3,php,getaway, 6, 8, 20.06.2009 ect]

我如何找到该主题的所有相关主题

4 个答案:

答案 0 :(得分:1)

这取决于你对相关的定义。一种方法是进行全文搜索,查找主题标题,并使用mysql's functions或更好,Sphinx或Lucene显示最佳结果。

答案 1 :(得分:1)

您需要定义适用于您的域的相对性。一种天真的方式是将相关主题的标题标记为单词(在本例中为“php”)并进行全文搜索以查找具有类似文章的其他主题。然后结合并呈现。

答案 2 :(得分:1)

我经常在MySQL中使用REGEXP搜索进行通配符搜索。但对于听起来像是一个提供相关项目的相当复杂的系统来说,它肯定不是一个神奇的子弹。

通常,为了进行比较,在数据库中构建了分类系统。由于计算机不是魔术,因此需要提供信息进行比较。在这种情况下,您可以定义类别或关键字,然后使用查询来显示包含这些关键字或类别定义的项目。然后挑战变成了如何种下这些类别?

答案 3 :(得分:1)

我不知道为什么我不能评论其他人的答案所以请原谅这个“答案”

“我忘了添加每个主题,有一些关于它们的生物,就像关于段落说出主题是什么的200个字符,这是将内容相互关联的好方法吗?”

这是一种非常不可靠的关联方式。如果是这种情况,几乎每件事都会有关系,因为每个主题都会出现常见的单词。像“the”或“and”这样的词会将所有内容都与全文搜索相关联,具体取决于您如何协调比较。

在您的情况下,您可能想澄清您计划比较的方式。你已经提到过你正在使用php和mysql,所以我们都假设你正在编写一个查询来查找关系。 为什么你要避开关系表?关键字表?这是基本的Web开发,看起来非常奇怪,你会对一个非常简单的概念的复杂工作感兴趣。

博客{id,title body,date} 主题{id,title} blog_topic {id,blog_id,topic_id}

$sql = "SELECT b.*, t.* FROM `blogs` b LEFT JOIN `blog_topic` r ON r.`blog_id` = b.`id` LEFT JOIN `topic` t ON t.`id` = r.`topic_id` WHERE t.`id` = ".$whatever_topic_id_you_pass;

对我来说似乎很简单。比一些奇怪的全文搜索更可靠。