Как найти запись в базе данных 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.