按标签搜索引擎

时间:2012-11-18 20:41:09

标签: php sql sqlite

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

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

我可以爆炸标签并根据需要进行尽可能多的数据库访问,但我确定这不是这样做的方式= p

LIKEIN无效,因为参数可能按任何顺序包含多个标记。

任何帮助?

2 个答案:

答案 0 :(得分:3)

这不是如何构建的。

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

在tagsToNews中只记录新闻项ID和标签ID,然后进行连接以获得所需内容。这也意味着可以重命名标签而不会破坏所有内容!

答案 1 :(得分:2)

最简单的解决方案

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

更具适应性的解决方案

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