使用LIKE%进行任意单词搜索

时间:2012-02-23 02:15:28

标签: php mysql sql search sql-like

我有一个数据库表,其中包含字段firstname和字段lastname。我正在尝试使用搜索框实现任意字搜索系统,如果让我们说数据库中有一个名为John Stanley Smith的用户(firstname = John Stanleylastname = Smith),我如果用户键入以下任何内容,则希望能够返回John Stanley Smith

1-任何属于John Stanley Smith(j,s,l,e,y,m等等)的字母。 2-任何单词John Stanley Smith的一部分 3- John Stanley Smith的任意单词组合(任何顺序),表示如果用户输入John StanleyJohn SmithStanley Smith或{{1} (你明白了)等等......我希望能够找到Stanley John

我知道我可以使用MySQL Fulltext Search功能执行此操作,但如果我这样做,第一点将无效(因为MySQL全文搜索功能仅匹配整个单词,而不匹配字符串中的子串)。此外,搜索执行所需的字数最少(由John Stanley Smith常量设置)。所以,我真的想用LIKE%来做这件事。

谢谢

2 个答案:

答案 0 :(得分:0)

我可能会误解,但你考虑过这样做:

SELECT * FROM customer WHERE
    CONCAT(firstname, " ", lastname) LIKE '%$pattern%'

如果用户输入多个单词,用空格分隔,则将字符串简单拆分为单词并将查询修改为

SELECT * FROM customer WHERE
    CONCAT(firstname, " ", lastname) LIKE '%$word1%'
 OR CONCAT(firstname, " ", lastname) LIKE '%$word2%'
 OR CONCAT(firstname, " ", lastname) LIKE '%$word3%'
 ...

答案 1 :(得分:0)

希望这有帮助

$whereclauses=array();

$terms = explode(' ', $search_term);
foreach ($terms as $term) {
    $term = mysql_real_escape_string($term);
    $whereclauses[] = "CONCAT(first_name, ' ', last_name) LIKE '%$term%'";
}
$sql = "select * from table where";
$sql .= implode(' and ', $whereclauses);