【问题标题】:SQL permutation querySQL 排列查询
【发布时间】:2020-02-21 08:14:53
【问题描述】:

我有关键字搜索功能。我想要一个 sql 查询来搜索数据库中单词的排列。 如果我输入 "ABC" 那么它应该搜索 ["ABC", "ACB", "BAC", "BCA", "CAB", "CBA"] 所有的组合词。

我检查了多个选项,首先他们创建排列词然后过滤数据。但我的问题是当我们输入长字符串 eq 时:-“ABCDEFGIJ”它的排列词数增加到“362880”词。(长 sql 字符串需要很多时间来搜索)

我需要一个单一/简单/快速的查询来过滤数据库中的数据。

如果您有任何可能的解决方案,请告诉我。

【问题讨论】:

  • 您好,欢迎来到 StackOverflow。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出以及您实际获得的输出(控制台输出、回溯等)。您可能还想了解Minimal, Complete, and Verifiable Examples
  • 规范化您的数据 - 用它们的排列替换关键字(或添加一个更多字段),其中所有符号都已排序。然后对搜索条件执行相同操作。
  • 这个discussion 也可能有帮助。
  • @Satishsehgal 。 . .我删除了不一致的数据库标签。请仅使用您真正使用的数据库进行标记。

标签: sql ruby-on-rails-5


【解决方案1】:

正如 Akina 所写的那样,照着做。

存储您的数据:

------------------------
| Value    |   Sorted  | 
------------------------
| ABCD     | ABCD      |
| DCAB     | ABCD      | 
------------------------

对你的搜索字符串进行排序,然后你只需要搜索一次。 适用于单词和通配符。

-----------------------------
| Value       |   Sorted    | 
-----------------------------
| In the hut  | IN HUT THE  |
| In the dark | IN DARK THE |
| In the zone | IN THE ZONE | 
| In our hut  | IN HUT OUR  | 
-----------------------------

搜索In the将搜索IN*THE并找到3个结果

搜索In hut将搜索IN*HUT并找到2个结果

【讨论】:

  • Akina,Thomas,根据您的解决方案,我们应该为字符串“ABCDEFGIJ”存储“362880”个组合数吗?我认为这不是可行的解决方案。
  • 您在数据库中创建了一个附加列,用于存储排序为 A' 的字符串 A。然后你搜索字符串 S 但作为 S' 并且你得到相同数量的匹配。至于搜索所有排列。
  • 我不知道你不明白什么。可能在阅读“上周谜语”fivethirtyeight.com/features/… 的 2 秒解决方案时,您明白了
猜你喜欢
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 2022-09-22
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
相关资源
最近更新 更多