我一直在考虑它,似乎无法找到在普通mysql中实现它的方法。
我有一个单词列表(大小不固定):
对于这些单词中的每一个,我都有一个同义词列表(大小不固定)。对于word11,对于intance:
我的目标是获得所有不同的可能性:
我考虑使用临时表来存储不同的结果。
对于每个单词,以及存储在临时表中的每个结果,请插入新的同义词。
word11的第一次迭代将给出
对于迭代2,对于这些条目中的每一个,通过用其同义词替换word21来插入同义词。
但这似乎非常乏味,可能有更好的方法(甚至不确定它是否会接近实际工作)。
任何提示?
答案 0 :(得分:1)
不幸的是,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;