2

所以,我是 PHP 和数据库的新手,这里有一个问题:

我有一个名为的表news,其中一列是tags. 此列包含 1 个或多个以空格分隔的标签,例如economics politics sports. 我有一个页面,它将接收一个或多个标签作为单个参数,我必须返回包含至少一个此标签的所有行。

我可以分解标签并根据需要进行尽可能多的数据库访问,但我确信这不是这样做的方法 =p

LIKE并且IN也不起作用,因为参数可能以任何顺序包含超过 1 个标签。

有什么帮助吗?

4

2 回答 2

3

这不是如何构建的。

有一个名为 news 的表,一个名为 tags,一个名为 tagsToNews。

在 tagsToNews 中只需记录新闻项目 ID 和标签 ID,然后进行连接以获取您想要的内容。这也意味着可以重命名标签而不会破坏一切!

于 2012-11-18T20:43:39.977 回答
2

最简单的解决方案

将您的表转换为 MyISAM 表并tags使用 FULLTEXT 索引对其进行索引。从那里,使用该MATCH()函数针对查询字符串(可能包含多个单词)提取该行的匹配值

更具适应性的解决方案

删除该表并使用每行一个标签重新创建它。您将通过这种方式有效地实现 FULLTEXT 数组,因为这正是它的本质。如果您打算爆炸数据,请避免将数据存储在长字符串中 - 通常,存储原子部分通常效率更高,因为您不必依赖饥饿的 LIKE 运算符。

于 2012-11-18T20:45:02.763 回答