2017-05-05 131 views
0

所以我有兩個表一個是問題它有一個描述字段,我試圖匹配主題表search_keyword字段。MYSQL匹配字段到逗號分隔的關鍵字的另一個字段

例如問題表描述字段有這樣的:

q.description 
------------- 
Have you ever traveled to China? 

而且對主題表SEARCH_KEYWORD領域具有這樣的:

t.search_keywords 
------------- 
travel, traveled, traveling, traveler, travel agency, jet set 

所以基本上我試圖縮小爲一個結果集基於具有任何關鍵字的描述的問題。

這是我的查詢到目前爲止,我給出的主題URL是一個可以縮小一些東西的字段,但是必須通過將描述與search_keywords相匹配來縮小範圍。

SELECT * FROM question q 
     LEFT JOIN topic t ON t.category_id = q.category_id 
     WHERE t.url = 'travel' AND 
     FIND_IN_SET(q.description, t.search_keywords) 

注:我不能更改數據庫不幸

任何幫助,將不勝感激!

回答

0

,可以儲存的關鍵字作爲單獨的行,而不是逗號分隔值:

t.search_keywords 
------------- 
travel 
traveled 
traveling 
traveler 
travel agency 
jet set 

然後,你可以簡單地添加%雙方找到匹配:

select * 
from question q 
left join topic t on t.category_id = q.category_id 
where t.url = 'travel' 
    and q.description like concat('%', t.search_keywords, '%'); 
+0

我沒有那個選項,數據庫不能改變。如果你可以修改逗號的答案,這將是非常感謝。 –

+0

@JCLopez - 這就是規範化非常重要的原因。您可以按照[此答案](http://stackoverflow.com/a/17942691/6348498)在加入之前將CSV值轉換爲單獨的行。 – GurV

+0

我同意,但它是一個頑固的客戶,不想改變它。我看到了CSV值解決方案,但似乎無法在小提琴上工作。我試圖使用RLIKE最壞的情況,我將不得不使用PHP來縮小問題的範圍。 –

相關問題