2017-04-23 42 views
1

多個關鍵字結果我有一個鏈接到某個職位::關鍵字數據庫如何組搜索與MySQL中

Table word_index: word_id - keyword 
Table word_rel: word_id - postId - unique_id 


Example word_index: 
1 - keyword1 
2 - keyword2 
3 - keyword3 
... 

Example word_rel: 
1 - 1 - 1 
2 - 1 - 2 
3 - 2 - 3 
... 

現在,用戶可以搜索一個或多個關鍵詞(就像谷歌的作品) 。

我使用一個SQL查詢,這工作正常。然而,當他們使用多個關鍵字,我希望結果是嚴格,只能說明有兩個關鍵字的匹配結果。現在查詢返回所有具有其中一個關鍵字作爲匹配的帖子。

SELECT g.postName 
FROM 
(SELECT gr.postId FROM word_index wi INNER JOIN word_rel gr ON wi.word_id = 
gr.word_id (keyword1,keyword2)) prr 
INNER JOIN posts g ON g.postId = prr.postId 
GROUP BY g.postId DESC 

所以在FROM (SELECT ...)部分Select選擇所有匹配項。之後,它應該只顯示與兩個關鍵字的所有匹配,而不是兩個之一。

我能做到這一點,在過去GROUP BY部分或我要改變一切?

回答

0

你可以用GROUP BYHAVING做到這一點:

SELECT gr.postId 
FROM word_index wi INNER JOIN 
    word_rel gr 
    ON wi.word_id = gr.word_id 
WHERE wi.keyword IN (keyword1, keyword2) 
GROUP BY gr.postId 
HAVING COUNT(*) = 2; 

您需要從提供的搜索字符串構建IN列表。然後,您需要分配基礎上要匹配關鍵字的數量在HAVING比較值。

注意:您可能需要做一些預處理,以確保關鍵字不輸入兩次。

+0

運行完美!謝謝 –