我目前正在进行实时搜索,我需要能够在两列中找到名称的一部分(我们需要分隔名字和姓氏).我个人希望保持命令简短,但是我能够让它工作的唯一方法是:
用户搜索
John Doe
Run Code Online (Sandbox Code Playgroud)
生成的SQL查询
SELECT * FROM users WHERE
(first_name LIKE '%john%' OR last_name LIKE '%john%') AND
(last_name LIKE '%doe%' OR last_name LIKE '%doe%');
Run Code Online (Sandbox Code Playgroud)
搜索字段是一个框,所以我做了一些简单的空格分隔.大多数情况下这不会超出三套条款,只是想知道是否有更好的方法来做到这一点.
注意: 我希望能够进行部分匹配.所以如果我找"John Do",我应该能找到John Doe
解决方案 在Rolando的帮助下,我确实提出了一个解决方案,发布给其他发现此问题的人.按照他的说明如何在下面创建索引,然后运行:
SELECT * FROM users WHERE
(MATCH(first,last) AGAINST ('+john* +do*' IN BOOLEAN MODE))
Run Code Online (Sandbox Code Playgroud)