2013-01-22 60 views
-1

例如,如果我搜索'貓',我會得到所有帶有'貓'字樣的標題,例如'cat在帽子裏'。爲我的個人圖書館編寫圖書館搜索程序,在選擇多詞時遇到問題

如果我輸入'cat hat',我應該找回'cat in the hat',但查詢返回空白,因爲它正好查找'cat hat'並忽略'cat in the hat'。

我需要某種選擇,在其中查找所有標題與我搜索的任何單詞,然後爲下一個單詞等等......然後......我不知道,某種大而全面的東西...

到目前爲止林與somethign就像玩:

$query = "SELECT title 
FROM books 
WHERE TITLE LIKE '%" . $search . "%' LIMIT 0,75;"; 

可能需要某種形式的遞歸函數的地方它打破了搜索輸入字符串數組和做每一樣東西,合併搜索他們。

想法?

+0

你應該知道,這打開與SQL注入 – Lamak

+0

@lamak雖然你是正確的,我相信他正在寫這個程序供自己使用的攻擊。所以除非他打算sql注入自己,否則它應該沒問題... –

回答

0
$query = "SELECT title 
FROM books 
WHERE TITLE LIKE '%" . $search1 . "%' AND LIKE '%" . $search2 . "%' LIMIT 0,75;"; 

您需要爲每個搜索項添加一個AND子句。如果你願意,你也可以添加一個OR。他們會給出不同的結果。 OR會有更多的結果,AND當然會更具體。

0

您應該能夠輸入數組做到這一點如果是單純針對查詢一個字段。如果它是多個字段,則必須使用地圖來完成。

我想指出的一件事是,這看起來像SQL注入的目標可疑。在將SQL查詢串聯在一起時請非常謹慎。必須轉義和/或參數化最終結果以防止用戶運行任意SQL。

0

答案:

  1. 斯普利特$搜索上的常態符號和空格,然後生成查詢

  2. 使用MySql Full Text Search

陷阱: 完整的SQL文本搜索更好的選擇會導致更快的結果。另外請注意,您當前的查詢很容易受到SQL注入的影響,請使用mysqli::real_escape_string來避免這種情況。

感謝

+0

它的唯一更快的,如果它的很多記錄和它的索引。否則一個簡單的AND就會工作得很好。 –