如何使用标题和标签搜索大多数相关项目

时间:2011-09-06 01:54:46

标签: mysql search tags

我的网页左侧有主要内容,右侧条带上的相关项目标题就像在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

有任何想法或建议吗?

1 个答案:

答案 0 :(得分: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列表。通过这种方式,您将获得所有具有相同标签的条目的列表,这些条目按照最先查看的标签排序。您可能还希望按标签流行度和类似标签的数量进行排序,以便将时尚主题放在列表顶部且共享最多的标签。