Как найти запись в базе данных MySQL по первой букве.
К примеру, у нас есть таблица в MySQL, где прописаны пользователи по формату Фамилия и Имя, и у нас есть поле формы на сайте, где мы ищем пользователя по первым буквам фамилии или имени.
- Иванов Сергей
- Петрова Ирина
- Николаев Сергей
Если нам требовалось искать только по первому слову, т.е по фамилии, то запрос к MySQL был бы такой:
1 2 3 |
select name from users where name like 'и%' |
В этом запросе мы отбираем все строки из таблицы users, где в поле name запись начинается на букву «и». В нашем случае мы отберем только одну запись — Иванов Сергей. Если добавить знак процента еще перед буквой «и», то мы отберем все записи, где встречается буква «и», в нашем примере, это будут отобраны все три записи, но этот вариант нам не подойдет, если задача стоит, отобрать пользователей только по фамилии.
1 2 3 |
select name from users where name like '%и%' |
Если стоит задача найти по первой букве фамилию и имя, т.е в нашем случае, при вводе буквы «и», мы должны отобрать Иванов Сергей и Петрова Ирина. В этом случае можно использовать регулярные выражения в запросе:
1 2 3 |
select name from users where name REGEXP '^(и)|[[:space:]](и)' |
В этом запросе ^(и) — отбирает все записи, которые начинаются с буквы «и», а [[:space:]](и) — отбирает все записи, где есть пробел, а далее следует буква «и».
Здесь есть один нюанс, буква «и» написана в нижнем регистре, поэтому нужно или регистр в запросе менять, сразу отправлять в условие заглавную букву «И», или можно сделать по другому, а именно, поменять регистр содержимого поля, по которому мы осуществляем отбор.
1 2 3 |
select name from users where LOWER(name) REGEXP '^(и)|[[:space:]](и)' |
На базе таких простых запросов, можно создать AJAX форму, в которой будет реализован алгоритм поиска пользователей без перезагрузки страницы. Например, вам нужно отправить рассылку или письмо какому-то пользователю, и у вас есть форма отбора адресатов, а этот код можно использовать в коде php.