試試這個:
select distinct
url
from
tbl_index a
where
(select count(*) from tbl_index b where a.url=b.url and b.keyword in ('word 1', 'word 2' . . .)) = n
其中n
是關鍵字您正在尋找「字2」號和「字1」等是關鍵詞。
我建議你創建三個表格:每個唯一的URL一行,一個數字ID和URL名稱,第二個表格每個唯一關鍵字一行,數字ID和關鍵字,然後一個交叉參考表與所有的一對網址id - 關鍵字id:
create table urls (
url_id int identity,
url varchar(800),
primary key (url_id)
)
create table keywords (
keyword_id int identity,
keyword nvarchar(50),
primary key (keyword_id)
)
create table urlkeys (
url_id int,
keyword_id int,
primary key (url_id, keyword_id)
)
這樣你應該減少數據的大小。上面的查詢變得像這樣:
select
url
from
urls
where (select count(*) from urlkeys join keywords on urlkeys.keyword_id=keywords.keyword_id where urlkeys.url_id=urls.url_id and keywords.keyword in ('word 1', 'word 2' . . .)) = n
這將是一個好主意,對keyword
列
附:索引這是一個簡單的SQL解決方案的大綱,但正如不同的人已經在評論中指出的那樣,這是一個使用全文搜索解決方案最好解決的問題。只要你嘗試做詞幹,鄰近搜索,部分單詞搜索,通配符等等,任何基於SQL的解決方案都會失敗。
也許逆向索引可能有幫助..這是我做了什麼,當我把一個內部的搜索引擎。 http://en.wikipedia.org/wiki/Reverse_index – GDF
爲什麼不只是全文?這只是爲了咯咯笑嗎? –
@JeremyHolovacs全文顯示是什麼意思?我有幾十段對每個網址,我分成單詞,然後插入數據庫 –