我有一个数据库表,其中包含字段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
或{{1} (你明白了)等等......我希望能够找到Stanley John
。
我知道我可以使用MySQL Fulltext Search功能执行此操作,但如果我这样做,第一点将无效(因为MySQL全文搜索功能仅匹配整个单词,而不匹配字符串中的子串)。此外,搜索执行所需的字数最少(由John Stanley Smith
常量设置)。所以,我真的想用LIKE%来做这件事。
谢谢
答案 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);