2012-07-24 107 views
1

我有一個SQLite數據庫2表。SQLite - 如何實現搜索功能的排序

第一種是所謂的單詞和具有看起來像行: (ID,字)

第二個被稱爲WORDS2SECTION並具有看起來像行: (ID,sectionid)

書中的每個單詞都以WORDS格式列出,並有相應的ID。 第二個表格是將每個id(代表一個詞)連接到本書特定部分的一堆行。

我希望能夠輸入一堆不同的單詞並找到包含所有這些單詞的sectionid數字。

如果有一個詞,然後我很好:

SELECT sectionid JOIN WORDS WHERE word = '%hello%' 

我的問題是,然後,我怎麼擴大這是能夠找到具有所有單詞的輸入列表的sectionid 。

我嘗試這樣做:

SELECT sectionid JOIN WORDS ON WORDS.id = WORDS2SECTION.id WHERE word = '%hello%' IN (SELECT sectionid JOIN WORDS ON WORDS.id = WORDS2SECTION.id WHERE word = '%word2%') 

但是,這似乎並沒有工作。有任何想法嗎?我搜索了一段時間試圖找到一個解決方案,但我還沒找到。雖然,我承認我是SQL的新手。

+0

有一個可用於sqlite的全文搜索模塊,它可以使你的任務更有效率。 http://www.sqlite.org/fts3.html – 2012-07-24 17:00:21

回答

0

組由sectionid

select sectionid, count(sectionid) 
from WORDS2SECTION 
where id in (select id 
    from WORDS 
    where word in ('hello', 'foo', 'bar') 
) 
group by sectionid 

如果計數相同的單詞數,你有一個完美的衝擊。如果數字較低,則會找到一些單詞。這樣,你可以衡量結果。

使用having count(sectionid) > X,可以將結果限制爲至少匹配X個匹配項的結果。

使用order by count(sectionid) desc會首先給你最好的配對。

+0

謝謝!這完成了這項工作。 – 2012-07-25 17:32:46

0
select sectionid 
    from WORDS2SECTION 
where id in (select id 
         from WORDS 
         where word like '%hellow%'); 
+0

這兩個表都加入了'id' – 2012-07-24 13:06:53

相關問題