REGEXP для поиска шаблона

yrevich

Новичок
REGEXP для поиска шаблона

нужно найти в базе все модели соответствующие заданной строке, но отличающиеся ТОЛЬКО цифрами

например, исходная строка Canon powershot a590
а найти надо:
Canon powershot a690
Canon powershot a790
и т.п.

select * from models where name REGEXP 'Canon powershot a[0-9]+'
ищет, но вытаскивает любое вхождения, например Canon powershot a890 is
как построить запрос?
 

yrevich

Новичок
как?
$ не подходит т.к. в исходной строке после цифр тоже что-то может быть
Canon powershot a590s
 

Beavis

Banned
yrevich
а почему тогда тебе не подходит эта строка? Canon powershot a890 is
 

yrevich

Новичок
ok, исходный вариант
Canon powershot a890 is
нужно найти
Canon powershot a790 is
Canon powershot a690 is
и не найти
Canon powershot a890 si
 

Beavis

Banned
yrevich
Сделай отдельное поле в таблице и храни там название товара но без цифр, например Canon powershot a is
А при поиске похожих товаров удаляй из названия цифры и сравнивай полученное название с полем, где хранится название без цифр
 

Alexandre

PHPПенсионер
забирай все данные, а при показе исключай исх строку.
 

yrevich

Новичок
to Beavis

т.е. я правильно понял, что аналог такого кода одним махом в базе не сделать (сделать доп поле в базе можно, но имхо какой-то кривоватый путь)?

$model_merge= preg_replace("/(\d+)/", "[0-9]+", $model);
$search= preg_match("/$model_from_db/", $model_merge);
 

Beavis

Banned
Автор оригинала: yrevich
to Beavis

т.е. я правильно понял, что аналог такого кода одним махом в базе не сделать (сделать доп поле в базе можно, но имхо какой-то кривоватый путь)?

$model_merge= preg_replace("/(\d+)/", "[0-9]+", $model);
$search= preg_match("/$model_from_db/", $model_merge);
нифига он не кривоватый... не надо будет каждый раз для каждой строки обсчитывать значение без цифр и использовать регулярки в MySQL
 
Сверху