示例字词
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
任何人都可以建议,这样做的正确方法是什么。
答案 0 :(得分:3)
您可以从输入中构建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 - 我们不关心接下来的内容。您可以使用[a-z]*
替换所有空格并使用^
前缀
答案 1 :(得分:1)
如果我理解你的逻辑,你可以尝试这样的查询:
select `walpha` AS word, pageID AS id
from `SX01`
where
`table`= 'S01'
and `walpha` like concat(replace('" . $yoursearchval . "', ' ', '% '), '%')
limit 100
例如:
concat(replace('i k', ' ', '% '), '%')
将成为:
i% k%
但如果您希望这些单词是连续的,那么您必须使用正则表达式:
where whalpa regexp concat('^', replace('i k', ' ', '[^[:space:]]+ '))
我将成为:
^i[^[:space:]]+ k
答案 2 :(得分:0)
select id,title,upper(left(title,1)) AS FirstLetter from store order by title