假如我有一個MySQL數據庫中的書籍表,並且我想在'title'字段中搜索關鍵字(由用戶在搜索字段中輸入);在PHP中這樣做的最好方法是什麼? MySQL LIKE
命令是最有效的搜索方式嗎?用PHP搜索MySQL數據庫的最佳方式是什麼?
回答
是的,最有效的方式通常是在數據庫中搜索。要做到這一點,你有三種選擇:
- LIKE, ILIKE精確匹配子
- RLIKE匹配POSIX正則表達式
- FULLTEXT索引,以匹配另一個三種不同類型的搜索的目的是自然語言處理
所以這取決於你將要實際尋找什麼來決定什麼是最好的。對於書名,我會提供一個LIKE搜索確切的子字符串匹配,當人們知道他們正在查找的書以及FULLTEXT搜索以幫助找到類似單詞或短語的標題時非常有用。我當然會在界面上給他們不同的名字,可能類似於子字符串搜索和類似的全文搜索。
約全文一個例子:http://www.onlamp.com/pub/a/onlamp/2003/06/26/fulltext.html
這裏有一個簡單的方法,你可以掰開一些關鍵字建立一些條款對這些關鍵字過濾列,無論是AND或OR在一起。
$terms=explode(',', $_GET['keywords']);
$clauses=array();
foreach($terms as $term)
{
//remove any chars you don't want to be searching - adjust to suit
//your requirements
$clean=trim(preg_replace('/[^a-z0-9]/i', '', $term));
if (!empty($clean))
{
//note use of mysql_escape_string - while not strictly required
//in this example due to the preg_replace earlier, it's good
//practice to sanitize your DB inputs in case you modify that
//filter...
$clauses[]="title like '%".mysql_escape_string($clean)."%'";
}
}
if (!empty($clauses))
{
//concatenate the clauses together with AND or OR, depending on
//your requirements
$filter='('.implode(' AND ', $clauses).')';
//build and execute the required SQL
$sql="select * from foo where $filter";
}
else
{
//no search term, do something else, find everything?
}
您還可以檢查同音功能(同音,聽起來像)MySQL手冊中http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex 其功能恢復這些比賽舉例來說,如果嚴格的檢查(由LIKE或=)未返回任何結果。
Paul Dixon的代碼示例爲基於LIKE的方法獲得了良好的主要思想。 (AND | OR)單選按鈕在界面中設置,默認爲AND,那麼如果用戶的查詢結果爲零(0)匹配且包含至少兩個單詞,有一個選項,效果作出迴應:
「對不起,沒有匹配被發現的搜索短語展開搜索,以匹配任何單詞這句話在你
也許有一個更好的辦法?去說這個,但是基本的想法是引導這個人走向另一個查詢(可能會成功),用戶不必用AND和OR的布爾邏輯思考。
考慮使用sphinx。這是一個開源的全文引擎,可以直接使用你的mysql數據庫。它比手工編寫的LIKE語句更具可擴展性和靈活性(並且對SQL注入的影響要小得多)
我認爲如果是單詞,Like就是最有效的方法。正如已經說過的那樣,多個單詞可能會與爆炸函數分開。然後它可以循環並用於通過數據庫單獨搜索。如果返回兩次相同的結果,可以通過將值讀入數組來檢查。如果它已經存在於數組中,則忽略它。然後通過計數功能,您可以知道在循環打印時停止的位置。可以用similar_text函數來完成排序。百分比用於對數組進行排序。這是最好的。
- 1. 過濾搜索查詢的最佳方式是什麼 - PHP MySQL
- 2. 什麼是將我的頁面編入MySQL數據庫的最佳方式,用於定製PHP搜索引擎?
- 3. 記錄mysql數據庫的最佳方式是什麼?
- 4. 什麼是使用PHP插入多行到MySQL數據庫的最佳方式?
- 5. 什麼是使用Lucene索引和搜索我的數據的最佳方式?
- 6. 什麼是在數據庫中搜索UPC代碼的最佳方式?
- 7. 在MySQL/PHP中進行大致搜索匹配的最佳方式是什麼?
- 8. 構建SMART mySQL和PHP搜索引擎的最佳方式是什麼?
- 9. 什麼是最佳搜索方法?
- 10. 什麼是搜索數百萬文件的最佳方式?
- 11. 什麼是車輛搜索的最佳數據挖掘方法?
- 12. 什麼是使用Delphi的Web數據庫的最佳方式?
- 13. 什麼是使用鈦創建數據庫的最佳方式
- 14. 在mysql數據庫中存儲html數據的最佳方式是什麼?
- 15. 什麼是從mysql數據庫生成和打印數據的最佳方式
- 16. 將1,600,000行數據上傳到mysql數據庫的最佳方式是什麼?
- 17. 什麼是從AWS RDS Mysql數據庫公開數據的最佳方式?
- 18. 什麼是存儲MySQL數據庫的Android應用程序的最佳方式
- 19. 使在線數據庫可搜索的最佳方法是什麼?
- 20. 將MySQL用於圖像庫的最佳方式是什麼?
- 21. 將iphone應用連接到mysql數據庫的最佳方式是什麼?
- 22. 在MySql中彙總數據的最佳方式是什麼?
- 23. 在php中連接數據庫的最佳方法是什麼?
- 24. 使用選項編碼PHP/MYSQL搜索的最佳方式
- 25. 什麼是在數據存儲實體內搜索的最佳方式?
- 26. 建立我的數據庫的最佳方式是什麼
- 27. 什麼是搜索查詢的最佳方式?
- 28. 在Rails中按日期搜索的最佳方式是什麼?
- 29. 什麼是包裝搜索區域的最佳語義方式?
- 30. 什麼是同時搜索多個來源的最佳方式?
斯芬克斯會爲此工作嗎? – 2016-03-05 18:09:02