Php 通过标签列表查找相关帖子
我有一个包含新闻帖子的表,该表中的一个字段是“标签”字段,其中包含逗号分隔的标签列表-原因与此无关,因为这是一个旧表,标签现在无法移植到另一个表,并且不能对表结构或应用程序的功能进行任何更改 我正在尝试确定查询数据库以查找具有类似标记的帖子的最佳方法Php 通过标签列表查找相关帖子,php,sql,algorithm,Php,Sql,Algorithm,我有一个包含新闻帖子的表,该表中的一个字段是“标签”字段,其中包含逗号分隔的标签列表-原因与此无关,因为这是一个旧表,标签现在无法移植到另一个表,并且不能对表结构或应用程序的功能进行任何更改 我正在尝试确定查询数据库以查找具有类似标记的帖子的最佳方法 有没有比拆分和修剪标记字段并执行类似查询更好/更智能的解决方案?您可以创建一个标记表,以及标记和张贴表之间的多对多标记表 然后,您可以将posts.tags列迁移到tags和tags\u posts 最后,您可以查询标签\u帖子而不是帖子。标签如果
有没有比拆分和修剪标记字段并执行类似查询更好/更智能的解决方案?您可以创建一个
标记
表,以及标记
和张贴
表之间的多对多标记
表
然后,您可以将posts.tags
列迁移到tags
和tags\u posts
最后,您可以查询
标签\u帖子
而不是帖子。标签
如果您无法触摸数据库,您可以在数据库外部添加额外的搜索索引,例如Lucene或Sphinx吗
如果我们不是在讨论潜在的大量数据,您甚至可以使用ZF的Zend_Search_Lucene来实现Lucene索引,而无需安装任何外部服务/软件等
然后,您可以按标签为文章编制索引,使用索引查找带有特定标签(或标签和其他属性的组合)的文章,并根据Lucene返回的ID从DB中获取相关结果 迁移到sphinx/lucene体系结构需要做一些工作,这比将标签移动到单独的表中要困难得多。
最简单的解决方案,而不是获取所有字符串并解析所有字符串,您可以运行类似于
WHERE instr(concat(“,”,tags_field,“,”),php“)>0的搜索,这正是我试图避免的解决方案,因为我还需要更新应用程序的主要部分。遗憾的是,让事情保持原样在数据库中是一项要求。那么更新标记和基于posts.tags的标记的cron作业呢?你会保留posts.tags——直到你更新整个应用程序——并且能够立即使用tags\u posts。这是一个比移植整个东西稍微好一点的选择,但是这种双重性有点让人讨厌,你不觉得吗?总是有点“让人讨厌”当您希望部分升级软件时,因为这需要向后兼容。为什么你认为PHP本身有这么多东西是疯狂的?hehebetter/smarter解决方案用于一个不那么智能的数据库设计?我完全同意,但因为它不在我的掌握之中,我无能为力,我需要解决一个遗留问题,我稍后会诅咒db设计器:)