【发布时间】:2012-03-13 10:53:48
【问题描述】:
我有一个数据库表,其中有一个字段firstname 和一个字段lastname。我正在尝试使用搜索框实现任意词搜索系统,如果假设我们在数据库中有一个名为John Stanley Smith 的用户(其中firstname = John Stanley 和lastname = Smith),我希望能够返回John Stanley Smith 如果用户键入以下任何内容:
1- 属于John Stanley Smith 的任何字母(j、s、l、e、y、m 等...)
2- 任何属于John Stanley Smith的单词
3-作为John Stanley Smith的一部分的任何单词组合(以任何顺序),这意味着,如果用户输入John Stanley或John Smith或Stanley Smith或Stanley John(你明白了)等。 ..我希望能够找到John Stanley Smith。
我知道我可以使用MySQL Fulltext Search 功能做到这一点,但如果我这样做,第一点将不起作用(因为 MySQL 全文搜索功能只匹配整个单词,而不是字符串中的子字符串)。此外,执行搜索所需的最少字数(由min_word_len 常量设置)。所以,我真的很想用 LIKE % 来做到这一点。
谢谢
【问题讨论】:
-
不可能用简单的查询——你必须做一些丑陋的查询构建来做
where like '%j%' or like '%o%' or like '%h%' etc...或一系列instr()调用等等。性能可能非常糟糕,并且有大量误报 -
我想不出现成的解决方案,但我想使用一些正则表达式(可能还有一些 UNION):dev.mysql.com/doc/refman/5.1/en/regexp.html
标签: php mysql sql search sql-like