2009-06-22 58 views
1

嘿,我得到了這個挑戰,我有一個MySQL數據庫表1與查詢或文本和表2同義詞和錯誤拼寫爲CSV [逗號分隔值]。現在我想測試表1中的任何查詢詞是否與表2中的同義詞匹配或拼寫錯誤,然後我會分別選擇它們。MySQL查詢/比較表1和表2中的關鍵字:

例如:

表1行:「我生病了HIV艾滋病,我能做些什麼」

表2:HIV,AIDS,癌症,結核病,水痘......

所以這將被選擇,因爲至少有表1,表2相匹配的同義詞的匹配字。

回答

0
select strings.text 
    from table1 strings 
where exists (
     select 1 
      from table2 sm 
      where instr(strings.text, sm.word) <> 0 
     ) 
2

在一個MyISAM表:

SELECT * 
FROM table1 com, table2 syn 
WHERE MATCH (com.body) AGAINST(syn.list IN BOOLEAN MODE); 

這甚至會工作,如果你沒有在com.body一個FULLTEXT指數,但與一FULLTEXT指數這將是超級快。

如果你換你同義詞列表到雙引號,像這樣:

"HIV", "AIDS", "chicken pox", "swine flu" 

,只有整個短語都會被匹配,而不是分裂的話。

+0

嘿, Qns?您是否真的在發佈之前測試了這一點?即時通訊使用相同的技巧,但得到「錯誤1210(HY000):不正確的參數反對」。 認爲參數不好。 – 2009-06-24 14:45:13