2011-09-06 62 views
0

我有一个网站,其左侧有主要内容,右侧网站上的相关商品标题与Youtube中一样。如何使用标题和标签搜索大多数相关商品

我想要的是查询最相关的项目,以显示在Youtube.com的正确地带。

更多的信息: 在显示任何项目的页面上,有项目标题,图片,非常简短的描述和标签(限于5)。

在数据库中,我记录了浏览次数,页面投票数和评论数。
我的问题是我的网页是泰语,所有单词的标题和说明都是用单词之间没有空格的方式编写的,这使得很难找到或检索关键字表单标题和说明。

我现在所做的只是查询具有相似标签或标签并按照视图数量排序的项目。它适用于故事中未关闭的不同项目。我观察到,对于具有相同标签的项目(即使是1个标签),结果几乎相同。我认为它应该在任何项目上显示不同的结果,比如在youtube.com上。

介绍技术信息: 我有主表:entry, entry_tag, tag.

表中存储entry_id, title,number of view, number of vote, number of comment, etc.
表entry_tag店entry_id, tag_id

表标签存储tag_id and tag

我当前的代码是这样的:

SELECT DISTINCT t1.* FROM entry AS t1 
INNER JOIN entry_tag AS t2 ON t1.entry_id=t2.entry_id 
INNER JOIN tag AS t3 ON t2.tag_id=t3.tag_id 
INNER JOIN tag AS t4 ON t3.tag=t4.tag 
INNER JOIN entry_tag AS t5 ON t4.tag_id=t5.tag_id 
WHERE t5.entry_id={$entry_id} AND t1.entry_id!={$entry_id} 
ORDER BY view DESC 
LIMIT 20 

任何想法或建议,这样做?

回答

0

看起来你在查询中有额外的连接,这对我没有任何意义。我会做这样的查询...

select distinct entry.* 
from entry 
join entry_tag on (entry.entry_id = entry_tag.entry_id) 
join tag on (entry_tag.tag_id = tag.tag_id) 
where tag.tag_id in (<comma separated list of tag id's>) 
order by entry.number_of_views desc 
limit 20 

我传递TAG_ID的基础上对您显示当前文章的标签列表。通过这种方式,您将获得具有相同标签的所有条目的列表,这些条目由最先查看的标签排序。您也可能想要通过标签热门程度和类似标签的数量进行排序,以便将流行主题置于最常见标签的顶部。

+0

我的代码中的额外连接来自想法,我想用一个输入作为entry_id进行查询,并避免额外的查询来获取tag_id,以便代码为我提供所有不同的entry_id和同一行中的所有字段。您的代码也是一个好主意,特别是通过标记人口和类似的标记进行排序。你有想法在单个查询中做到这一点吗?谢谢。 –