在制定用于自动完成表单(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”进行完全匹配。因此,搜索“麦田里的守望者”的用户会找到这本书,但搜索“麦田里的守望者”的用户不会。
最后一个结果是最好的,因为它在字符串前后都有一个通配符。但是,它也给出了最长的自动完成列表。用户必须输入几个字母来缩小搜索结果的范围。
关于实现更有效查询的任何想法?或者第三种选择是最好的选择(因为将书名中的定冠词分开是不可行的?
提前致谢,