我已經構建了一個程序來爲文本文件中的關鍵字建立索引並將它們放到數據庫中。根據關鍵字的優先順序返回大多數匹配結果
我的表很簡單:
FILE_ID|Name
------------
1 | a.txt
2 | b.txt
3 | c.txt
KEYWORD_ID|FILE_ID|Hits
-----------------------
1 | 1 | 55
2 | 1 | 10
3 | 1 | 88
1 | 2 | 44
2 | 2 | 15
1 | 3 | 199
2 | 3 | 1
3 | 3 | 4
有此表沒有主鍵。我沒有發現它是必要的。
現在我想搜索哪些文件對特定關鍵字的點擊次數最多。
如果我只有一個關鍵詞很容易:
select top 10 *
from words
where keyword_id=1
order by hits desc
可以說,我想搜索的關鍵詞中1和3個文件(兩者都必須存在,並且第一關鍵字具有最高的重要性)。幾個小時後,我來到這裏:
select top 10 k.*
from
(
select file_id,
max(hits) as maxhits
from words
where keyword_id=3
group by file_id
) as x
inner join keyword as k
on (k.file_id = x.file_id
and k.keyword=1)
order by k.hits desc
如何使正確嗎?特別是如果我想用N個關鍵字進行搜索。它會更好地使用臨時表和工作?
如果與關鍵字1和3搜索我想要FILE_ID 3和1回,順序(因爲3 FILE_ID有關鍵字1更高的命中次數)
根據樣本數據,什麼是預期的輸出,如果'搜索文件與關鍵字1和3'? –
如果使用關鍵字1和3進行搜索,我希望以此順序返回FILE_ID 3和1(因爲file_id 3對關鍵字1的命中計數較高)。 – itix
@itix請檢查我的答案 – DhruvJoshi