我正在一个拥有用户和用户生成的文章,画廊和视频的网站上工作.我正在尝试建立一个标记系统并搜索它们.
起初我在想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样式).
在查看文章,图库或视频时,还会有相关内容的链接,因此我只考虑将LIMIT设置为“1,3”时使用相同的查询,以避免显示自己.
Q1 – 这个系统怎么样?
我对系统很满意,直到找到this
他们在哪
>一个’标签’表,其中包含两个
列主要ID和唯一
indexed tag_name.
>他们拥有的’类型’表
另一个主要ID和唯一
索引’类型'(类别)(我想
我可以用它
用户/视频/条/画廊)
>一个’搜索’表,其中包含
带有外国身份证的文章的网址
来自’标签’和’类型’. (我想
而不是一个完整的网址,我可以
存储相关的外国ID以便
我可以生成网址,例如
article.php?ID = ….)
Q2 – 这个系统看起来效率更高……虽然如何搜索标题或描述?
Q3 – 另一个坏处是每个页面视图我都必须加入标签..所以它可能没有那么高效.
Q4 – 我的系统也只搜索布尔值,使用’like’查询会更好吗?
Q5 – 我限制我的用户为4个标签,但我鼓励单字(stackoverflow样式)…我意识到虽然在我的系统中搜索“火车站”将不匹配像“火车站”这样的标签怎么做我绕过这个?
这么多问题……对不起,这太长了.谢谢.
最佳答案 Q1 – 您最好使用三个单独的表格来存放文章,标签以及与文章和标签相关的链接表.您还可以使用两个表格和articles_tags表格来完成它. articles_tags表将包含articleID字段,标签本身作为复合键.通过两个或三个表,可以轻松找到哪些文章具有给定标记以及哪些标记分配给给定文章.
Q2 – 标题和描述搜索可以使用“喜欢”与百分比或使用正则表达式或全文搜索来完成.
Q3 – 不要担心将标签表加入其他标签表.要解释Knuth,首先构建它,然后找出瓶颈. MySQL非常擅长它的功能.一遍又一遍地将这些桌子连在一起不会有害.
Q4 – 这取决于你想要从结果中得到什么.通常你想要实际的数据,然后你可以测试返回的行数,告诉你它是真还是假.
Q5 – 再次,在查询传递到数据库之前,你必须在PHP端使用“like”语法和一些创意正则表达式.
祝好运!