php - 自动完成 SQL 查询建议 (Ajax+PHP)

标签 php jquery mysql sql ajax

在制定用于自动完成表单(jquery Axax + PHP)的查询时,我有一个关于 SQL 最佳实践的问题。

让我们假设如下:

  • 我有一个包含书名的数据库
  • 有些书的书名没有定冠词(“The”或“A”),例如“少年派奇幻漂流”
  • 有些书的标题带有定冠词(“The”或“A”),例如“The Catcher in the Rye”

因此,用户将在开头使用“The”或简单地省略“The”来输入书名,然后在没有任何定冠词的情况下开始查询。

似乎存在三种可能的查询:

SELECT 'title' FROM 'books' WHERE 'title' LIKE '%$string'

SELECT 'title' FROM 'books' WHERE 'title' LIKE '$string%'

SELECT 'title' FROM 'books' WHERE 'title' LIKE '%$string%'

当使用第一种查询方法(% 在字符串之前)时,很难得到任何结果,因为字符串之前的通配符似乎表现错误。

当使用第二个查询时,它似乎更倾向于在标题前使用“The”进行精确匹配。因此,搜索“麦田里的守望者”的用户会找到这本书,但搜索“麦田里的守望者”的用户则找不到。

最后一个结果是最好的,因为它在字符串前后都有一个通配符。但是,它也给出了最长的自动完成列表。用户将不得不键入几个字母来缩小搜索结果的范围。

关于实现更高效查询的任何想法?或者第三个选项是最好的(因为书名中的定冠词分开是不可行的?

提前致谢

最佳答案

您可以使用正则表达式进行搜索(查询结果很快就会出现) 并且不要忘记为您的结果添加限制。

一个小例子

SELECT title FROM books WHERE title REGEXP '$string' LIMIT 20

或者你可以使用单词边界

SELECT title FROM books WHERE title REGEXP '[[:<:]]$string[[:>:]]' LIMIT 20

查看文件http://dev.mysql.com/doc/refman/5.5/en/regexp.html

关于php - 自动完成 SQL 查询建议 (Ajax+PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15347223/

相关文章:

javascript - Bootstrap 选项卡插件无法正常工作

php - slim 3 : what is HTTP Cache for?

php - MySQL SELECT 所有列,但用某些默认值替换 null 或空列

PHP 登录脚本不工作

mysql - 密秩价格

mysql - 如何查询MySQL中包含空字符的字段

java - 如何在给定模型(Java Web)中引用另一个模型?

javascript - onResize() 在 WordPress 4.7.2 中不起作用

javascript - 使用Jquery解析多个xml文件

javascript - 将 Tealium 的 utag.view 和/或 utag.link 用于动态加载的元素