2011-08-06 44 views
0

我已經看過這裏的問題,但找不到與我試圖實現的具體匹配的答案...SQL匹配或其他一些方法來搜索兩個表

基本上我有一個存儲FAQ信息的SQL表。下表中的主鍵爲粗體。

表:問題, 領域:id_question,提問,回答,狀態等......

表:question_tags, 領域:id_question標籤

表:標籤, 字段:標籤

該question_tags表是基本上是問題表和標籤表之間的鏈接(即,許多到很多)。

我正在做的是實現類似SQL MATCH AGAINST的功能,因此當用戶在搜索框(PHP)中輸入問題時,系統會查找問題表並在搜索詞中搜索關鍵字的問題。我可以讓這個工作,但我希望能夠做的是在搜索中包含標籤。這樣做的原因是,我相信有許多不同的方式同一個問題可以用不同的詞。這些標籤應該在搜索時讚美這個問題。我明白,這使用SQL中的對陣功能,所以我有點卡住是不可能的。

有沒有解決這個限制的辦法嗎?

或者代替具有在一個單獨的表中的一個單獨的列中的每個標籤的如上(與第三表鏈接),我應該簡單地創建在問題表中的另一個字段用於整個標籤字符串?

抑或是其他任何人有任何其他建議?

該解決方案將無法與大型數據集合作,開始但它會是有益的,如果解決方案是可擴展性。

感謝

回答

0

標籤可能是去標準化這個用例一個很好的候選人。

一種可能是像

SELECT * FROM 
(
SELECT Question, Answer, Status, MATCH(title,category) AGAINST ('keyword') as rank 
FROM questions 
WHERE MATCH(Question,Answer) AGAINST ('Keyword') 
UNION 
SELECT Question, Answer, Status, MATCH(Tag) AGAINST ('keyword') 
FROM questions Q 
INNER JOIN question_tags QT 
    ON Q.id_question = QT.id_question 
INNER JOIN tags T 
    ON QT.id_tag = T.id_tag 
WHERE MATCH(Tag) AGAINST ('keyword') 
) R 
ORDER BY rank 

基本上是做對提問/回答一個FT搜索,另一個是關於標籤和unioning結果集,然後按等級排序。