2016-03-06 28 views
0

我必須開發一個簡單的搜索頁面,使搜索字符串與MySQL表中的字段相匹配。MySQL查詢過濾包含搜索字符串中的任何單詞的記錄

假設數據庫表是「記錄」,考慮的字段是'record_title'。另請說明以下是行中的'record_titles'。

字詞1字詞2
字1 WORD3 word4
的word5單詞2字1
word6

現在,在搜索表單,說用戶提交的搜索字詞如 '字詞1 word7', '字詞1', '字1的word5', 'word1 word2'等,它應該返回在搜索詞中至少有一個單詞的歌詞。它不應該將搜索字符串作爲子字符串,例如,如果搜索詞是'單詞',它不應該返回上述記錄集中的任何記錄。

我試着跟隨,但它有時不匹配單個單詞。

MATCH(`recordTitle`) AGAINST ('+word1 +word2' IN BOOLEAN MODE); 

如何它(或另一種解決方案)可以用於選擇包含至少一個字匹配的記錄。

謝謝。

吉爾

+0

您使用哪種格式的SEARCH關鍵字,或者您得到的單個字符串是否被搜索,或者您得到的單個字符串是多個單詞,並且它們之間用SPACES分隔?@GUIR ??? –

+0

抱歉,換行符在此處已被忽略。 – GUIR

+0

完成:),每行代表一行中的recordTitle – GUIR

回答

0

假設你要搜索的字符串:

variableToBeSearched = 'word word2 word3'; 

你將不得不將其分割成與分隔空間數組的第一個(取決於您所使用的語言MySQL的)。 因此:

Array[0] = 'word' 
Array[1] = 'word2' 
Array[2] = 'word3' 

然後迭代數組並構建查詢字符串。

string Query = "SELECT * FROM records WHERE "; 
if(Array.Length != 0) 
{ 
    For(i=0; i<Array.Length; i++) 
    { 
     if(i != (Array.Length-1)) 
     { 
      Query += "record_title LIKE '%" + Array[i] + "% ' OR "; 
     } 
     else 
     { 
      Query += "record_title LIKE '%" + Array[i] + "% '"; 
     } 
    } 
} 
else 
{ 
    // No words found in the String :-) 
} 

然後執行QUERY。請通知我是否需要從礦區清除一些理解。

+0

由於我不知道您使用MySQL的特定語言,所以我編寫了僞代碼。 @GUIR –

+1

謝謝。這工作。但在我的情況下,我不需要搜索字符串作爲數據庫記錄的子字符串。它只能匹配任何一個或多個完整的「單詞」,而不能匹配db記錄中的單詞的子串。例如,假設搜索字詞是'超級',如果我們在數據庫中有一個'supersede'字樣,它應該是匹配的搜索字符串。但是,如果數據庫有一個記錄的「超級指揮」,它應該匹配,因爲這裏「超級」是一個完整的詞,而不是一個子字符串。 – GUIR

+0

我明白了你的觀點。那麼讓我澄清一些事情。誰在TABLE @GUIR中輸入record_title COLUMNS數據。如果您手動執行此操作,則手動輸入COLUMN中的單詞,如「超級指揮」和「取代」。記下每個字符串結尾處的空格(甚至是字符串中最後一個單詞之後的空格)。然後用** Query + =「record_title LIKE'%」+ Array [i] +「%'」更新ANSWER查詢; **在末尾有一個空格。 –

1

其實你可以使用sql中的運算符 - http://www.w3schools.com/sql/sql_in.asp 和php implode函數來製作逗號分隔的字符串,以便在你的sql字符串中使用。

$searchArr = implode(', ', $arraySearch); 
$sql = "select * from records where record_title in ($searchArr);"; 
+0

他想要在每個數組行中搜索用SPACE分隔的字符串,所以LIKE是必須的 –

+0

謝謝。我會進一步解釋,但稍後。請參閱下面的@MalikAsif的評論。 – GUIR

相關問題