【问题标题】:MySql - split record that contains multiple words [duplicate]MySql - 包含多个单词的拆分记录[重复]
【发布时间】:2017-10-09 00:43:13
【问题描述】:

我是 MySQL 和所有与编码相关的新手,我需要你的帮助! 我有一个包含以下列的表:

table1
~~~~~~
id,
question,  
answer, 
keywords. 

“关键字”列包含多个单词,中间有逗号(例如:word1、word2、word3 等...) 我有一个搜索机器人(用 PHP 编写) 每当用户提出问题时(问题应转换为数组/关键字) 那么查询应该搜索关键字以找到包含最匹配关键字的行并显示答案。

有正确的方法吗? 提前谢谢!

【问题讨论】:

  • 是的。请参阅规范化。
  • 正确的方法应该是规范化你的表格。CSV(逗号分隔值)很难查询
  • 如果要精确匹配关键字就不行,否则可以在查询中使用LIKE进行搜索
  • 住手!以爱的名义,在你伤透我们的心之前。 youtube.com/watch?v=NPBkiBbO4_4 想一想。不要进行这种 a,b,c 数据格式设置,除非某些傻瓜给你留下了这种数据格式。规范化您的数据。为这种一对多关系添加一个新表。现在就做。

标签: php mysql


【解决方案1】:

这在 MySQL 中是可能的(参见 SQL split values to multiple rows),但最佳实践和最方便的解决方案是规范化,确切地说是第一种形式(原子性)。

创建一个名为keywords 的新表,其中keyword_id(索引)和keyword(唯一),在这两个字段上添加一个复合主键。

使用主表中的idkeyword_id(两个外键)创建另一个名为question_has_keywords 的表。

这被称为 N 到 M 关系表,因为许多问题可以有许多关键字。

要查找数据,您可以使用JOIN

Funfact - 使用 MongoDB 聚合($unwind 管道阶段)将是一项如此简单的任务。

【讨论】:

    【解决方案2】:

    我建议使用 FIND_IN_SET() 函数在您的列中搜索关键字,以逗号分隔

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多