我已经考虑了很多次了,似乎无法在普通的mysql中找到一种方法来实现它。
我有一个单词列表(大小不是固定的):
对于这些单词中的每一个,我有一个同义词列表(大小不是固定的)。对于word11来说,意图是:
我的目标是获得所有不同的可能性:
我考虑使用一个临时表来存储不同的结果。
对于每个单词,以及存储在临时表中的每个结果,插入新的同义词。
word11的第一次迭代将给出
对于迭代2,对于这些条目中的每一个,通过用同义词替换word21来插入同义词。
但这似乎很乏味,而且可能有更好的方法(甚至不确定它是否接近实际工作)。
有什么暗示吗?
发布于 2014-08-17 21:54:25
不幸的是,MySQL不支持递归查询或分层查询,这才是真正需要的。对于固定数量的单词,您可以:
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应该如下所示:
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;https://stackoverflow.com/questions/25353761
复制相似问题