2015-07-01 63 views
0

我有兩個表搜索出現在標題中的關鍵詞

1,產品領域

1.product_id 
2.product_title, 
3.product_desc 
4.product_img 

2.keywords領域

1. id 
2. keyword 

關鍵字將

1.hair 
2 body 
3 tv 
4 mobile 

product_title將是

1. Hair oil 
2. Hair Straightner 
3. Body oil 
4. Body massage 
5. LCD TV 32" 
6. LED TV 40" 
7. Air conditioner 
8. Washing machine 
9. Refrigrator 

根據目前的標題就必須表現出上市關鍵字,在這裏它必須顯示1產品6,它不應該顯示7〜9。我該怎麼辦呢?

+0

做的就是添加一個表productsToKeywords,讓你多到2個表之間一對多的關係的最好的事情 –

回答

0

你可以試試這個:

select p.* from Product p 
    inner join Keyword k 
    on p.product_title like '%' + k.keyword + '%' 

如果有可能在關鍵字或標題字段empty值,那麼你需要添加條件忽略這樣的記錄了。否則,它會與所有人匹配。

+1

事實上,空值會永不匹配。然而,如果一個關鍵字可以是一個非空字符串,那麼它將匹配所有。 –

+0

@Zohar感謝您指出。我的意思是一個導致'%%'的關鍵字,但是寫了null。糾正了這一點。 – wonderbell

0

我建議你使用EXISTS這樣的:

SELECT * 
FROM products p 
WHERE EXISTS(SELECT 1 
       FROM keywords k 
       WHERE p.product_title Like '%' + k.keyword + '%') 
1

恕我直言,做的最好的事情就是添加一個表productsToKeywords,讓你很多的productsKeywords表之間一對多的關係。

create table productsToKeywords 
(
    ptk_product_id int foreigm key reference products (product_id), 
    ptk_keyword_id int foreigm key reference keywords (id), 
    primary key(ptk_product_id, ptk_keyword_id) 
) 

那麼你的選擇會是這個樣子:

select product_id, product_title,, product_desc, product_img 
from products 
inner join productsToKeywords on(product_id = ptk_product_id) 
inner join Keywords on(ptk_keyword_id = id) 
where keyword = 'hair'