Неформатированный запрос на выборку данных из таблицы

Игорь68

Новичок
Суть задачи
Есть таблица Code:
id name code
1 Иван 154-178-475-921
2 Сергей 325-485-921-751
3 Виктор 365-985-785-125
4 Игорь 456-963-852-741
5 Олег 125-789-452-145

Есть переменная $code:, которая может принимать значения следующего вида:
(ПРИМЕР)
$code = 365-985-785-125
$code =365985785125
$code =365-985-785-125 + «текст»
$code =365985785125 + «текст»
$code = «текст» +365-985-785-125
$code = «текст» + 365985785125
В первом случае всё понятно, форматы совпадают, как быть в остальных случаях?
Как должен выглядеть запрос к таблице Code, что бы вывело «Виктор» (согласно данных примера)
С уважением
 

antson

Новичок
Партнер клуба
из переменной $code нужно вычленить нормализованную форму в новую переменную
и уже с ее помощью делать запрос.
у тебя в примере два варианта написания кода,
можно заменой в строке '-' на '' свести к одному
последовательность 12 цифр
регулярка для поиска 12 цифр в строке простейшая
\d{12}

примеры навеяли мысль, что это для платного смс сервиса
поэтому все таки в случае, если код по примеру выше не нашелся
стоит принять меры по попыткам его вычленения дополнительно.
 

WMix

герр M:)ller
Партнер клуба
грубо так
Код:
select * from Code where replace(code, "-","") = preg_replace("~[^\d]~", "", $code )
при условии что в «текст» нет цифр
 

fixxxer

К.О.
Партнер клуба
ну, в нормальной базе можно сделать create index ... on code ((replace(code, '-','')))

что, конечно, не означает, что в базе надо хранить мусор
 

С.

Продвинутый новичок
Главный принцип -- определиться с нормальной формой записи кода. Соответственно все (данные для записи, данные для поиска) приводить к этому единому виду. Это может быть ХХХ-ХХХ-ХХХ-ХХХ или еще лучше ХХХХХХХХХХХХ. Черточки в нужном порядке можно расставлять при выводе. Все остальные советы с replace(code, "-","") можно рассматривать как гиковские изыски..
 
Последнее редактирование:
Сверху