SQLite - 如何实现各种搜索功能

时间:2012-07-24 04:15:14

标签: sql sqlite web-sql

我有一个包含2个表的SQLite数据库。

第一个名为WORDS,行数如下:   (id,word)

第二个名为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的新手。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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将首先为您提供最佳匹配。