假如我有一个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