Как я могу вернуть записи с запросом MySQL, используя регулярное выражение? - PullRequest
4 голосов
/ 05 мая 2009

У меня есть записи в моей базе данных, которые ищутся с помощью пользовательского ввода, и первоначально этого было достаточно для поиска правильных записей.

"SELECT id FROM plants WHERE Flower LIKE '%" . $sanitizedUserInput . "%'"

Это работало все хорошо и хорошо, но потом все стало происходить так: поиск «красный» позволил получить растения с последовательностью символов «красный» в их поле Flower, а не просто целое слово «красный». .

Мне предложили просто поставить пробел по обе стороны от ввода пользователя, но я знаю, что произойдет сбой, когда слово является первым словом в поле или последним. Я подумал про себя, я должен использовать регулярное выражение! Для поиска слова, где оно имеет границу слова с обеих сторон.

К сожалению, я никогда раньше не использовал регулярные выражения в базе данных. Как вы строите запрос для поиска в БД с помощью регулярного выражения? Надеюсь, это так просто, как это:

"SELECT id FROM plants WHERE Flower REGEX `/\b" . $sanitizedUserInput . " \b/`"

1 Ответ

7 голосов
/ 05 мая 2009

Да, это довольно просто.

Справочное руководство по MySQL - Регулярные выражения

Последовательности границ слов в регулярных выражениях MySQL: [[:<:]] и [[:>:]], так что в итоге вы получите нечто вроде:

$query = "SELECT id ".
            "FROM plants ".
            "WHERE Flower REGEXP '[[:<:]]".$sanitizedUserInput."[[:>:]]'";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...