Autor Zpráva
rampa76
Profil
Zdravím, řeším takovou zapeklitou záležitost :-)
V databázi mám uložený text, který obsahuje string MG-5450. Přes vyhledávání na webu mi do selectu přijde string MG5450, protože každý nemusí vědet, jak zní přesný název a pomlčku klidně vynechá. Tedy ve vyhledávaném výrazu vlastně jeden znak chybí proti stringu, který je v DB a který bych chtěl i přesto najít.

Můj dotaz: ví někdo jak čistě pomocí sql řešit tuto situaci, kdy potřebuji otestovat přidání navíc znaků a nevím předem jakých a nevím kam?
Jediné co mě napadlo, je rozsekat ten string třeba php skriptem na jednotlivá písmena a za každé vložit .? a celé to poslat do where regexp 'm.?g.?5.?4.?0', jenže to má dlouhou odezvu a vůbec to zřejmě moc výkonnosti aplikace neprospěje. Nezná někdo elegantnější řešení?
ShiraNai7
Profil
rampa76:
Co třeba ukládat do databáze také "normalizovanou" verzi toho textu (bez pomlček, mezer a jiných znaků), to samé udělat s vyhledávaným výrazem a pracovat takto?
rampa76
Profil
Jj, tohle už mě taky napadlo, ale chtěl jsem se tomu nějak šalamounsky vyhnout :-) Doufal jsem v nějaký trik, který mi unikl :-)
Tori
Profil
rampa76:
Takovéto vyhledávání (= porovnání dvou řetězců) bude podstatně rychlejší, než s regulárem.
ShiraNai7
Profil
rampa76:
ale chtěl jsem se tomu nějak šalamounsky vyhnout

Pokud mají všechny texty stejný formát (např. písmena, pomlčka, čísla - regulár něco jako ([A-Z]+)-([0-9]+) ..), tak lze vyhledávaný výraz automaticky upravit do tohoto tvaru.
rampa76
Profil
ShiraNai7:
to má právě naprosto neočekávaný formát pokaždé, vyřešil jsem to přidáním sloupce s textem bez znaků, díky za tip :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: