所以,我是 PHP 和数据库的新手,这里有一个问题:
我有一个名为的表news
,其中一列是tags
. 此列包含 1 个或多个以空格分隔的标签,例如economics politics sports
. 我有一个页面,它将接收一个或多个标签作为单个参数,我必须返回包含至少一个此标签的所有行。
我可以分解标签并根据需要进行尽可能多的数据库访问,但我确信这不是这样做的方法 =p
LIKE
并且IN
也不起作用,因为参数可能以任何顺序包含超过 1 个标签。
有什么帮助吗?
这不是如何构建的。
有一个名为 news 的表,一个名为 tags,一个名为 tagsToNews。
在 tagsToNews 中只需记录新闻项目 ID 和标签 ID,然后进行连接以获取您想要的内容。这也意味着可以重命名标签而不会破坏一切!
最简单的解决方案
将您的表转换为 MyISAM 表并tags
使用 FULLTEXT 索引对其进行索引。从那里,使用该MATCH()
函数针对查询字符串(可能包含多个单词)提取该行的匹配值
更具适应性的解决方案
删除该表并使用每行一个标签重新创建它。您将通过这种方式有效地实现 FULLTEXT 数组,因为这正是它的本质。如果您打算爆炸数据,请避免将数据存储在长字符串中 - 通常,存储原子部分通常效率更高,因为您不必依赖饥饿的 LIKE 运算符。