首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入所有组合的最佳方法

插入所有组合的最佳方法
EN

Stack Overflow用户
提问于 2014-08-17 21:24:14
回答 1查看 68关注 0票数 0

我已经考虑了很多次了,似乎无法在普通的mysql中找到一种方法来实现它。

我有一个单词列表(大小不是固定的):

  • word11
  • word21
  • word31
  • word41

对于这些单词中的每一个,我有一个同义词列表(大小不是固定的)。对于word11来说,意图是:

  • word12
  • word13
  • word14
  • word15
  • word16

我的目标是获得所有不同的可能性:

  • word11 word21 word31 word41
  • word12 word21 word31 word41
  • word13 word21 word31 word41
  • word14 word21 word31 word41
  • ..。
  • word11 word21 word31 word417
  • word11 word21 word31 word418

我考虑使用一个临时表来存储不同的结果。

对于每个单词,以及存储在临时表中的每个结果,插入新的同义词。

word11的第一次迭代将给出

  • word11 word21 word31 word41
  • word12 word21 word31 word41
  • word13 word21 word31 word41
  • word14 word21 word31 word41
  • word15 word21 word31 word41
  • word16 word21 word31 word41

对于迭代2,对于这些条目中的每一个,通过用同义词替换word21来插入同义词。

但这似乎很乏味,而且可能有更好的方法(甚至不确定它是否接近实际工作)。

有什么暗示吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-17 21:54:25

不幸的是,MySQL不支持递归查询或分层查询,这才是真正需要的。对于固定数量的单词,您可以:

代码语言:javascript
复制
select w1.synonym, w2.synonym, w3.synonym, w4.synonym
from synonyms w1 cross join
     synonyms w2 cross join
     synonyms w3 cross join
     synonyms w4
where w1.word = 'word1' and
      w2.word = 'word2' and
      w3.word = 'word3' and
      w4.word = 'word4';

(实际上,除非有一个单词是它自己的同义词,否则查询会更复杂,但对于上面的查询来说,这是一个简单的修正)。

为了增加更多的单词,你需要更多的连接,唉。如果你有一个固定的数字,那么你可以硬编码它。否则,可以将SQL生成为准备语句,然后执行。特定的SQL应该如下所示:

代码语言:javascript
复制
   select concat('select ', group_concat('w_', word, '.word' separator ', '),
                 ' from ',
                 group_concat('synonyms w_', word separator ' cross join '),
                 ' where ',
                 group_concat('w_', word, ' = ''', word, '''' separator ' and '
                )
   from words w;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25353761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档