gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:24:08 25 4
gpt4 key购买 nike

在制定用于自动完成表单(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com