默認情況下是這樣的:如何在MySQL中進行反向全文搜索?
select * from main_table where match(col1,col2) against('search_item');
但我要取的是相反的,
說,我已經恢復了所有的SEARCH_ITEM(1000條記錄,例如),
我想看看它們中的哪些與main_table中的指定行相匹配。
這樣可行嗎?
默認情況下是這樣的:如何在MySQL中進行反向全文搜索?
select * from main_table where match(col1,col2) against('search_item');
但我要取的是相反的,
說,我已經恢復了所有的SEARCH_ITEM(1000條記錄,例如),
我想看看它們中的哪些與main_table中的指定行相匹配。
這樣可行嗎?
你可以這樣做:
SELECT * FROM search_items WHERE (SELECT col1 FROM main_table WHERE ID = XXX) LIKE CONCAT('%',search_item,'%');
這是怎麼回事,如果你有一個龐大的數據集,以打通是相當不錯的慢。
如果速度是一個問題,處理這個問題的另一種方式(儘管承認更加複雜)是從數據庫中獲取所有數據並構建一個ternary search tree(也稱爲trie)。一旦你完成了構建trie的開銷,與強制方法相比,匹配輸入字符串閃電般快速。
那麼我意識到這是晚了十個月,但只是爲了後人。我想你的意思是,你想要的所有行search_items表這將不匹配查詢:
select * from main_table where match(col1,col2) against('search_item');
我會假設你MAIN_TABLE有一些獨特的標識符列其中我會打電話unqid。
select * from main_table
WHERE
unqid not in (select unqid
from main_table
where match(col1,col2) against('search_item')
)
我的第一個想法是使用一個MINUS算子,但事實證明MySQL沒有一個!
不,`like`不是解決方案,我需要使用與全文搜索相同的模式來完成 – omg 2009-07-02 00:04:59