【发布时间】:2013-02-27 03:20:45
【问题描述】:
我有一个关于在编写用于自动完成表单 (jquery Axax + PHP) 的查询时的 SQL 最佳实践的问题。
让我们假设以下内容:
- 我有一个包含书名的数据库
- 有些书的标题没有定冠词(“The”或“A”),例如“Life of Pi”
- 有些书的标题带有定冠词(“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”进行完全匹配。因此,搜索“麦田里的守望者”的用户会找到这本书,但搜索“麦田里的守望者”的用户不会。
最后一个结果是最好的,因为它在字符串前后都有一个通配符。但是,它也给出了最长的自动完成列表。用户必须输入几个字母来缩小搜索结果的范围。
关于实现更高效的查询有什么想法吗?还是第三个选项是最好的(因为在书名中将定冠词分开是不可行的?
提前致谢,
【问题讨论】: