2016-10-21 31 views
0

私はという単語とその同義語: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' 

誰でもこれを行うより効率的な方法を提案できますか?

+1

いくつかのサンプル・テーブル・データを追加し、期待される結果 - 同様形式のテキスト。 – jarlh

+0

@a_horse_with_no_name私はsqlite3を使用しています。 –

+0

@jarlh実際、スリランカ語のシンハラ語の母国語の言葉を使っています。だから私は、サンプルデータは意味をなさないと思います。英語のデータが(1、開始、開始、開始)になる場合 –

答えて

0

よりスケーラブルな解決方法は、各単語に1つの行を使用することです。

synonym_words(word_id, synonym_id, word, popularity) 

フィールド:

  • word_id:単語の主キー。
  • synonym_id:最初の同義語のword_idです。
  • 単語:同義語のテキスト。
  • 人気度:シノニムのリストのソート順です.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 

単語の最も一般的な同義語が変更されました。検索で使用された単語と同じsynonym_idを共有する最も人気のある単語(popularity = 1)をクエリに返します。

SQLクエリ:

SELECT word FROM synonym_words 
WHERE synonym_id = (SELECT synonym_id FROM synonym_words WHERE word = 'conclusion') 
AND popularity = 1 
関連する問題