【问题标题】:Best way to implement keywords or tags in Mysql在 Mysql 中实现关键字或标签的最佳方法
【发布时间】:2011-12-29 20:47:22
【问题描述】:

所以我有一个食谱数据库,我想将关键字或标签与每餐相关联,例如 如“中国人”、“意大利人”、“低卡”等。 用户从不提交关键字,所以我可以完全控制。 您认为以下哪项是最好的方法..

A) 我可以在餐桌上有一列用逗号填充关键字。 意大利语、健康等。然后我可以从单列的单行中获取结果,然后使用 PHP 解析结果并完成繁重的工作。

B) 我可以有一个关键字表,其中每一行包含 meal_id,然后是一个关键字。然后我可以查询具有该 ID 的所有关键字。

或者有没有更好的方法来实现全文等关键字?

【问题讨论】:

  • 你需要用这个关键字搜索所有的饭菜吗?
  • 是的,它必须将任何餐点与该关键字匹配,然后我将向用户显示与其相关的餐点。

标签: php mysql tags


【解决方案1】:

如果您的关键字是指标签之类的东西,许多网站都使用了这些标签,例如在 StackOverflow 上。然后你会有三张桌子。一张桌子,一张桌子,一张桌子,一张桌子,一张桌子,一张桌子把它们联系在一起。这样您就可以通过简单的 SQL 查询有效地列出与某个关键字相关的所有餐点。

【讨论】:

  • 是的。其实这是你最好的选择。这会创建多对多关系,从而减少冗余。
  • 这么多好的答案,但我喜欢克里斯托弗的解释。我在考虑这条路线,但问专家总是好的!
【解决方案2】:

我肯定会为关键字使用单独的表来确保您的数据库是规范化的。

【讨论】:

    【解决方案3】:

    绝对选择 B。这是更规范化的选项,也是最容易使用的选项。否则您的代码将不得不解析查询结果。

    【讨论】:

    • 前提是选项 B keyword 表示另一个关键字表的 ID。
    • 我认为他不是这个意思,但我同意。最好的答案是在mealkeyword 之间有一个关联表,例如meal_keyword,其中包含mealkeyword 的ID。
    【解决方案4】:

    B 更适合当您按标签搜索时,这将是一项微不足道的任务。有了A,您将不得不更加努力。同样使用 B,您始终可以使用 GROUP_CONCAT(tag)

    获得以通信分隔的标签

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 2019-10-05
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 2010-10-04
      相关资源
      最近更新 更多