我有一个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'
任何人都可以提出更有效的方法。
答案 0 :(得分:0)
更具伸缩性的解决方案是为每个单词使用一行。
synonym_words(word_id, synonym_id, word, popularity)
字段:
样本表数据:
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
假设单词不会改变,但随着时间的推移它们的受欢迎程度,如果您要更改单词的流行度顺序,则查询不应该中断,以便更改单词的最流行的同义词。您希望查询返回最常用的单词(popular = 1),该单词与搜索中使用的单词共享相同的synonym_id。
SQL查询:
SELECT word FROM synonym_words
WHERE synonym_id = (SELECT synonym_id FROM synonym_words WHERE word = 'conclusion')
AND popularity = 1