MySQL SELECT первая буква слов последовательно для поиска
Примеры слов:
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
Может кто-нибудь подсказать, каким будет правильный способ сделать это.
3 ответа
Вы можете создать регулярное выражение из ввода и затем использовать 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]*
и префикс с ^
Если я правильно понимаю вашу логику, вы можете попробовать выполнить такой запрос:
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
- строка должна начинаться с I
- после того, как я должен быть по крайней мере + один непробельный символ
- затем один пробел
- тогда один к
- тогда что-нибудь еще
выберите идентификатор, заголовок, верхний (левый (заголовок,1)) как FirstLetter из магазина, порядок по заголовку