我在一个有用户和用户生成的文章、画廊和视频的网站上工作,我试图制作一个标签系统,并搜索他们所有的东西。
起初,我在想,在tbl_articles、tbl_galleries和tbl_videos中,我会有一个标题、描述和标记字段。然后对每个查询运行如下查询:
select * from tbl_articles where match(title, description, tags)
against ('$search' in boolean mode) ORDER BY match(title, description, tags)
against ('$search' in boolean mode) DESC, views desc LIMIT 0, 3对tbl_galleries和tbl_videos的相同查询。对于用户,只需比较用户名。然后用一个“更多”按钮(facebook样式)在结果页面中各显示三个。
当查看一篇文章、图片库或视频时,也会有指向相关内容的链接,所以我想只使用相同的查询,限制设置为'1,3‘-以避免显示自己。
Q1 -这个系统怎么样?
我对这个系统很满意,直到我找到了这
他们在其中
Q2 -这个系统看起来要高效得多.虽然我如何搜索标题或描述?
Q3 --另一件坏事是,对于每一个页面视图,我都必须加入标记。所以它可能没有那么高的效率。
Q4 -我的系统也只搜索布尔值,我会更好地使用一个类似的查询吗?
Q5 -我限制我的用户为4个标签,但我鼓励单字(堆叠溢出样式).我意识到,在我的系统中,搜索“火车站”并不能与“火车站”这样的标签相匹配,我该如何绕过这个问题呢?
这么多问题..。抱歉太久了。谢谢。
发布于 2010-01-13 19:16:25
Q1 --您最好为文章、标签和一个与文章和标签相关的链接表提供三个单独的表。您还可以使用两个用于文章的表和一个articles_tags表来完成此操作。articles_tags表将包含一个articleID字段,并将标记本身作为一个复合键。两个或三个表都可以很容易地找到哪些项目有给定的标签,哪些标签分配给给定的项目。
Q2 -标题和描述搜索可以使用“喜欢”的百分比或正则表达式或全文搜索。
Q3 --不要担心将标签表与其他表连接起来。要理解Knuth,首先构建它,然后找到瓶颈。MySQL非常擅长它所做的事情。一遍又一遍地把这些桌子连在一起不会有什么害处。
Q4 --这取决于你想从结果中得到什么。通常,您需要的是实际数据,然后只需测试返回的行数,以判断其是否正确。
Q5 --同样,在将查询传递给数据库之前,您必须在PHP端使用"like“语法,或者使用一些创造性的正则表达式。
祝好运!
https://stackoverflow.com/questions/2058016
复制相似问题