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