2013-05-21 144 views
0

我有一個項目數據庫,我希望能夠使用預定義的關鍵字進行搜索。如何實現關鍵字搜索?

我已經把現在三個表是這樣的:

Items_tbl:

item_idx,項目(唯一),描述等

Keyword_tbl:

kw_idx,kw(UNIQUE),kw_description

Cross_tbl:

item_idx,kw_idx。

我想要做的「和」 - 搜索...... 像...給我(不同)每一個具有關鍵字「海藍寶石」,「藍色」和「綠色」項目。即「海藍寶石」&「藍色」&「綠色」...

搜索「或」 - 搜索很簡單,但我很難做一個像這樣的「和」搜索......在這個前。我想要找到既有「藍色」又有「綠色」的物品,但不是隻有「綠色」的物品。

+0

現在,你可能有一個MySQL基於搜索的時間表,但今後我會考慮安裝類似的Solr,Lucene的,Xapian的或其他相關軟件的搜索框架。 – 0xCAFEBABE

回答

0
SELECT Items_tbl.* 
FROM  Items_tbl 
    JOIN Cross_tbl USING (item_idx) 
    JOIN Keyword_tbl USING (kw_idx) 
WHERE kw_description IN ('aquamarine','blue','green') 
GROUP BY item_idx 
HAVING COUNT(*) = 3 

這假定關鍵字只能與項目至多相關聯的一個時間(即一個UNIQUE約束上(item_idx, kw_idx)Cross_tbl);如果不是這種情況,如果在Keyword_tbl(即kw_description列中沒有UNIQUE約束)中相同的關鍵字可能出現多次,則將必須用效率較低的COUNT(DISTINCT kw_idx)或效率更低的COUNT(DISTINCT kw_description)替換COUNT(*)

0

查詢每個關鍵字的源表。

select * from YourTable where YourColumn like '%keyword%' and YourColumn like '%foo%';

+0

我必須承認,我根本不明白這個答案。你能否詳細說明一下? –

+0

我假設你想「書」也找到關鍵詞「書架」和「留言」,因此喜歡運營商和通配符。 –