我有一个包含单词及其同义词的WORDTB
表:ID, WORD1, WORD2, WORD3, WORD4, WORD5
。这些词是按照它们出现的频率排列的。当给定任何单词时,我想查询并检索该特定单词的最常见同义词,即WORD1
列中的单词。
这是我尝试的查询,它工作得很好,但我认为这是低效的。
SELECT WORD1
FROM WORDTB
WHERE WORD1='xxxx'
OR WORD2='xxxx'
OR WORD3='xxxx'
OR WORD4='xxxx'
OR WORD5='xxxx'
有谁能提出更有效的方法吗?
一个更可扩展的解决方案是对每个单词使用单行。
synonym_words(word_id, synonym_id, word, popularity)
字段:
- word_id:字的主键。
- synonym_id:第一个同义词的word_id。
- word:同义词文本。
- popularity:同义词列表的排序顺序,1是最流行的。
示例表数据:
word_id | synonym_id | word | popularity
==============================================
1 | 1 | start | 1
2 | 1 | begin | 2
3 | 1 | originate | 3
4 | 1 | initiate | 4
5 | 1 | commence | 5
6 | 1 | create | 6
7 | 1 | startle | 7
8 | 1 | leave | 8
9 | 9 | end | 1
10 | 9 | ending | 2
11 | 9 | last | 3
12 | 9 | goal | 4
13 | 9 | death | 5
14 | 9 | conclusion | 6
15 | 9 | close | 7
16 | 9 | closing | 8
假设这些单词不会改变,但它们的流行度可能随着时间的推移而改变,那么如果您要改变单词的流行度顺序,从而改变一个单词最流行的同义词,查询应该不会中断。您希望查询返回与搜索中使用的单词具有相同同义词_id的最流行单词(popularity = 1)。
SQL查询:SELECT word FROM synonym_words
WHERE synonym_id = (SELECT synonym_id FROM synonym_words WHERE word = 'conclusion')
AND popularity = 1