|
|
|
| Для поиска по базе используется выражение:
$query = "SELECT * FROM kattov WHERE artikul = '$NUMBER' ";
|
На практике содержимое ячейки artikul может отличаться от образца наличием произвольно расположенных пробелов.
Например,
24024 170s
24 02 4 170 s
2402 4170 s
|
Как средствами REGEXP составить запрос таким образом, чтбы при $NUMBER = 24024170s были найдены все три перечисленные записи?
Если подготовить запрос так:
`artikul` REGEXP '^ *2 *4 *0 *2 *4 *1 *7 *0 *s *$'
| регистр букв будет учитываться?
И вообще, так можно делать? | |
|
|
|
|
|
|
|
для: Владимир55
(28.05.2013 в 17:39)
| | Если это не часто выполняемый запрос, поступите проще: удалите пробелы на время выполнения запроса
$query = "SELECT * FROM kattov WHERE REPLACE(artikul, ' ', '') = '$NUMBER' ";
|
Сам столбец затронут не будет, а вместо него будут нормализованные значения. Индексами, если есть, правда воспользоваться не получится (впрочем в MySQL, другие базы данных, например, PostrgreeSQL позволяют строить индексы по выражениям), зато получите то, что вам нужно. | |
|
|
|
|
|
|
|
для: cheops
(28.05.2013 в 21:23)
| | Ваше решение оказалось намного лучше!
Запрос с использованием REGEXP занимает 4.35 сек, тогда как при замене с помощью REPLACE требуется всего лишь 0.81 сек!
Для сравнения: запрос без обработки пробелов требует 0,73 сек. То есть, потеря времени при использовании REPLACE вполне допустима.
Спасибо! | |
|
|
|
|
|
|
|
для: Владимир55
(29.05.2013 в 10:30)
| | REGEXP и LIKE - самые медленные операторы. Ими стоит пользоваться только когда НИЧТО другое не подходит. | |
|
|
|
|
|
|
|
для: cheops
(28.05.2013 в 21:23)
| | А можно ли подобным образом изменить регистр букв в запросе? | |
|
|
|
|
|
|
|
для: Deed
(30.05.2013 в 12:38)
| | каким подобным?
С помощью РВ?
Или с помощью REPLACE?
А смысл?
Для этого есть функция LOWER().
P.S. Если я что-то не так понял, уточните вопрос.
P.P.S. Лучше под новые вопросы заводить новую тему. И в правильном разделе. Этот вопрос уже, по-моему, не имеет отношения к RegExp. | |
|
|
|
|
|
|
|
для: Sfinks
(30.05.2013 в 13:38)
| | Все, спасибо!
Гм, функция LOWER()... | |
|
|
|