2017-01-16 3 views
1

Mysql Datenbank enthält unter Art von Werten:Suche ohne Bindestrich in mysql

'AE01-1056 Ricoh Aficio' OR 'Ricoh AE01-1087 (AE01-1069)' etc

als ob ich ein normaler Benutzer i die Produktnamen wie

AE011056 in einfachen Text suchen. .. aber das Ergebnis wird nicht gefunden.

i hav diese Abfrage versucht:

$q="SELECT * FROM mytable WHERE (p.product_name LIKE '$name%' OR c.category_name LIKE '$name%' OR pm.name LIKE '$name%')"; 

was sich ändern sollte ich in meiner Anfrage machen das Produkt zu bekommen, weil Ich mag Betreiber versucht haben & es nicht für mich arbeiten.

+1

Sie sollten auch vorbereitete Anweisungen für eine Abfrage verwenden, die Benutzereingaben akzeptiert. Ansonsten öffnest du dich selbst für SQL-Injektionen. –

+0

Lesen Sie hier mehr für komplexe Nachschlagen: http://Stackoverflow.com/questions/4671378/levenshtein-mysql-php#4671557 – JustOnUnderMillions

+1

Vielen Dank @tim, aber eigentlich ist die Abfrage in Vorbereitung Aussage .. aber nur zur Vereinfachung habe ich hier geschrieben so was . –

Antwort

2

Verwendung Ersetzen-Funktion

$q="SELECT * FROM mytable 
WHERE (REPLACE(p.product_name,'-','') LIKE '%$name%' 
     OR REPLACE(c.category_name,'-','') LIKE '%$name%' 
     OR REPLACE(pm.name ,'-','') LIKE '%$name%')"; 
+0

Denke daran, dass dies jeden Index auf diesen Spalten nutzlos macht. – shmosel

+1

danke @hkutluay, ich habe dies auch versucht, aber nicht für mich arbeiten :( –

+1

ja @hkutluay, ich habe jetzt nur überprüft .... im Moment ist meine Abfrage wie folgt :: (p.product_name LIKE '$ name% 'ODER ERSETZEN (' p.product_name ',' - ',' ') LIKE'% $ name 'ODER c.category_name LIKE' $ name% 'ODER pm.name LIKE' $ name% ') –

0

Ich glaube, es gibt nur zwei Möglichkeiten:

1. Suchbegriff Manipulieren Wenn Sie knwo, Benutzer oft nach einem Code suchen und nicht verwenden nessesary Bindestriche, überprüfen Sie den Suchstring vor dem Suchen, wenn er einem bestimmten Format folgt, und fügen Sie den Hypen ein, wenn er fehlt.

2. alle Bindestriche in der where-Anweisung ersetzen http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_replace siehe

auf Ihrem Setup Je nach Lösung könnte man die leistungsfähigere Lösung sein, da Sie nur eine anstatt mehrere stringmanipulations zu tun haben.