[英]How to group search results with multiple keywords in 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
部分執行此操作,還是必須更改所有內容?
您可以使用GROUP BY
和HAVING
執行此操作:
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
指定比較值。
注意:您可能需要進行一些預處理,以確保不會輸入兩次關鍵字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.