Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过标签列表查找相关帖子_Php_Sql_Algorithm - Fatal编程技术网

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设计器:)