示例词:
iknkr st nm krt prk
iknkr vhgr j k pth
iknkr hkm st
iknkr sr vhgr j k pth
所需条件
现在,如果用户键入:
ik s
则查询将返回:iknkr st nm krt prk
iknkr sr vhgr j k pth
如果用户键入:
i v
则查询将返回:iknkr vhgr j k pth
当前正在尝试:
SELECT `walpha` AS word, pageID AS id
FROM `SX01`
WHERE `table`= 'S01'
AND `walpha` like '" . $this->db->escape_like_str($searchVal['keyword']) . "%'
LIMIT 100"
但使用此用户必须键入:
iknkr s
为了得到结果
iknkr st nm krt prk
iknkr sr vhgr j k pth
有人能建议一下,正确的做法是什么吗。
最佳答案
您可以从输入构建一个regular expression,然后使用REGEXP让MySQL使用它。例如,您可以将ik s
转换为^ik[a-z]* s
以匹配以ik
开头、后跟以s
开头的单词。。。
SELECT words FROM tbl WHERE t.words REGEXP '^ik[a-z]* s';
^
意味着我们必须从字符串开始匹配ik
必须是前两个字符[a-z]
将匹配任何小写字母字符*
允许我们匹配零个或多个以前的模式-即任何字符序列都可以遵循ik
则必须有一个空格s
后面跟着一个s-我们不在乎接下来会发生什么。您可以通过使用“cccc”替换所有空间并使用
[a-z]*
前缀来从用户输入构建该模式。