【问题标题】:Search engine by tags按标签搜索引擎
【发布时间】:2012-11-18 20:41:08
【问题描述】:

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

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

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

LIKEIN 也不起作用,因为参数可能包含超过 1 个标签。

有什么帮助吗?

【问题讨论】:

    标签: php sql sqlite


    【解决方案1】:

    这不是构造它的方式。

    有一个叫做 news 的表,一个叫做 tags,一个叫做 tagsToNews。

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

    【讨论】:

    • 嗯,这似乎是一个解决方案,谢谢 =)。还有一个问题:我也有一个页面可以插入新闻。有没有办法插入它并将其映射到同一查询中的标签?更多:如果标签不存在,创建标签?
    • 不在一个查询中,但您始终可以使用 INSERT TRIGGER。
    • 大多数人在两个查询中执行此操作(或者不管有多少),但使用触发器更健壮。
    • 感谢您的回复。我以前从未听说过触发器,所以我要去 2 个查询之一。如何?一个要插入新的,另一个要映射吗?但是如果新的可能有 2 个标签,你怎么能只映射一个查询呢?如果它是一个新标签,我也必须插入标签怎么办?我有点迷路了,有什么参考吗?提前致谢 =)。
    【解决方案2】:

    最简单的解决方案

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

    更具适应性的解决方案

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多