关于使用 PHP 和 MySQL 编写搜索功能的建议
我正在开发一个 Web 应用程序,其中一部分包含允许用户在数据库中的 7 个表中搜索多个字段的功能。
用户可以搜索(例如)
名字 - 文本
姓氏 - 文本
高度 - 选择
最低年龄 - 选择
最高年龄 - 选择
最喜欢的颜色 - 选择
学院 - 选择
...以及更多
HTML 搜索表单将包含文本字段、许多选择下拉列表和一些复选框。
任何人都可以提供任何建议、最佳实践、设计模式或资源来帮助解决此类问题。
非常感谢。
I am developing a web application, part of which contains a the ability to allow a user to search over multiple fields across 7 tables in a database.
Users can search (for example)
First Name - text
Last Name - text
Height - select
Age Minumum- select
Age Maximum- select
Favourite Color - select
College - select
...and many many more
The HTML search form will contain text fields, many select dropdowns and some checkboxes.
Can anyone offer any advice, best practice, design patterns or resources to assist with this kind of problem.
Many thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您需要在 sql 和通配符搜索字符中使用
LIKE
运算符。You need to use the
LIKE
operator in sql and wildcard search characters.我不会尝试在 SQL 中构建关键字搜索功能。您应该阅读 MySQL 的内置全文搜索功能。尝试通过基本 SQL 进行全面搜索将非常耗时且运行时缓慢。
全文搜索的基本思想是两个系统的结合。首先是索引器,它读取数据库中的关键字并创建它们的“索引”。其次,搜索器,它查看索引器创建的目录以创建搜索结果。
有第三方工具 - Lucene、Xapian、Sphinx - 封装了自己的索引器/搜索器。我使用 Xapian 取得了一些成功。
I wouldn't try to build a keyword search feature in SQL. You should read up on MySQL's built-in full-text search feature. Attempting a comprehensive search through basic SQL will be time consuming to develop and sluggish at runtime.
The basic idea of a full-text search is a combination of two systems. First, the Indexer, which reads your database for keywords and creates an "Index" of them. Second, the Searcher, which looks through the catalog created by the Indexer to create search results.
There are third party tools - Lucene, Xapian, Sphinx - which package their own Indexer/Searcher. I have used Xapian to some success.
我建议 Google 成为最佳搜索用户界面的典范。不要给我很多繁琐的字段,只需一个文本字段,这样我就可以输入“Shirley Jones UAF”
I would suggest that Google exemplifies the best UI for search. Don't give me a lot of fiddly fields, just one text field so I can type "Shirley Jones UAF"