MySQL-Volltextsuche mit REGXP

PH

Legendäres Mitglied
Ich habe eine MySQL-Datenbank mit Telefonnummern, die in den Verschiedensten Formaten gespeichert sind.

z.B.
+41 79 000 00 00
0041790000000
+41 (0)79 / 000 00 00
0790000000
079.000.00.00
079-000-00-00
usw...

Auf diesem Feld möchte ich nun eine LIKE '%suchbegriff%' laufen lassen, die mir alle Records liefern soll, wo die Telefonnummer eine bestimmte Ziffernfolge enthält.

In PHP selbst ist es ja kein Problem, alle Zeichen aus einem STRING zu löschen, wenn sie keine Ziffern sind, z.B.
CODE ereg_replace("[^0-9]", "", $string);


Gibt es so etwas auch in MySQL?

i.e.
WHERE ereg_replace("[^0-9]", "", TELNR) = suchbegriff ??
(wo TELNR die in MYSQL gespeicherte Tel-Nr ist)
 
Danke, habe das gelesen, bin aber nicht schlauer.

Ich denke, ich bin zu blöd dafür
sad.gif



Also... MySQL enhält das:
+41 79 000 00 00
0041790000000
+41 (0)79 / 000 00 00
0790000000
079.000.00.00
079-000-00-00
usw.

und ich will alle Nummern die die Folge '079000' enthalten (also alle records, die oben aufgeführt sind).

Wie mache ich das konkret?
 
ich habe auch nicht das Gefühl, dass der REGEXP die Antwort ist... ich möchte ja den Feldinhalt anders darstellen, und nicht den Suchbegriff.
Und REGEXP gibt nur true oder false zurück
 
Auf der verlinkten mySQL-Seite hast du sogar ein Beispiel für Telefonnummern (bei den Kommentaren)
wink.gif


Performancetechnisch ist eine solche Aktion aber grauenhaft..
 
Versuch mal folgendes.

CODE SELECT * FROM tbl_telefon WHERE telnr RLIKE '^0[^0-9]*7[^0-9]*9[^0-9]*0[^0-9]*0[^0-9]*0[^0-9]*$'
 
Experts Exchange hat etwas zu dem Thema:

http://www.experts-exchange.com/Database/M...Q_25030281.html

CODE select phoneNumber from test where phoneNumber REGEXP '[^0-9]*0[^0-9]*6[^0-9]*9[^0-9]*1[^0-9]*2[^0-9]*3[^0-9]*4[^0-9]*5[^0-9]*6[^0-9]*';



Man muss vor, hinter und zwischen jedem Digit des Suchbegriffs [^0-9]* einfügen.
 
QUOTE (Frank Diers @ Do 4.02.2010, 15:23) Versuch mal folgendes.


CODE SELECT * FROM tbl_telefon WHERE telnr  RLIKE '^0[^0-9]*7[^0-9]*9[^0-9]*0[^0-9]*0[^0-9]*0[^0-9]*$'


Danke! ganz ähnliche Lösung wie Experts-Exchange !
 
Es gibt zwei Möglichkeiten:

Variante 1: Die Telefonzahlen bereits bei der Eingabe strikten Regeln unterwerfen, so daß alle Telefonnummern gleich aufgebaut sind. Ist allerdings manchmal bei externen Nutzern heikel, weil das ein gewisses Störpotential hat. Intern nutzen das Kunden von mir häufig, um eigene Mitarbeiter auf eine 'strikte Variante' zu verdonnern.

Variante 2: Eine Zusatzspalte, in der die Telefonnummer bei jedem Insert / Update in einer kanonischen Form gespeichert wird (ohne Punkte, Leerzeichen, Klammern usw.). Die Suche geht dann über diese Spalte. Man muß nur drandenken, beim Löschen der Telefonnummer dann auch dieses Blindfeld zu löschen. Bei Altdaten kann man diese Spalte in einem Rutsch auffüllen.
 
Nun es gäbe noch die dritte Variante, nach der Eingabe, wird die Telefonnummer in ein einheitliches Format gequetscht. ;-)
 
Die Lösung hat wirklich funktioniert!
Performance ist gut - nur einige Millisekunden um 2000 Records zu durchsuchen.
 
Zurück
Oben