Suche nach Telefonnummern in MySQL
Die Suche nach Telefonnummern, die in verschiedenen Formaten gespeichert sind, kann eine erhebliche Herausforderung darstellen, wenn SQL-Datenbanken wie MySQL verwendet werden. Wenn Sie bereits in der Situation waren, dass Sie nach Telefonnummern suchen mussten, die anders formatiert sind als sie gespeichert wurden, etwa nach 07123456
suchen, um (07) 123 456
zu finden, sind Sie nicht allein. Dieser Blogbeitrag erklärt die besten Strategien zur Lösung dieses Problems Schritt für Schritt.
Das Problem verstehen
In vielen Situationen können Telefonnummern auf unzählige Arten formatiert werden. Hier sind einige Beispiele dafür, wie Telefonnummern in einer Datenbank gespeichert sein könnten:
027 123 5644
021 393-5593
(07) 123 456
042123456
Wenn Sie nach einer Telefonnummer suchen müssen, unabhängig von der Formatierung, liegt die Herausforderung darin, nicht-numerische Zeichen herauszufiltern.
Häufige Probleme mit Standardabfragen
Die Verwendung traditioneller MySQL-Stringfunktionen ist nicht sehr effektiv zum Herausfiltern von Zeichen und Vergleichen von Telefonnummern aufgrund der Einschränkungen von SQL:
- Eine einfache Abfrage kann zu langsamer Leistung führen, insbesondere bei größeren Datensätzen.
- Reguläre Ausdrücke sind in älteren MySQL-Versionen in ihrem Umfang begrenzt.
Lösungen, die in Betracht gezogen werden sollten
Bevor wir spezifische Lösungen betrachten, ist es wichtig, die Größe Ihres Datensatzes zu bewerten. Wenn Sie es mit ein paar hundert Zeilen zu tun haben, könnte eine einfachere Methode ausreichen. Hier ist eine Übersicht über mögliche Lösungen:
1. Erstellen einer Hash-Spalte
Eine vorgeschlagene Methode besteht darin, eine zusätzliche Spalte in Ihrer Telefonnummerntabelle zu erstellen, die eine gehashte Version der Telefonnummern speichert, bei der alle Formatierungszeichen entfernt werden.
-
Schritte:
- Fügen Sie eine neue Spalte, z. B.
phone_hash
, zu Ihrer bestehenden Tabelle hinzu. - Füllen Sie diese Spalte aus, indem Sie alle Sonderzeichen aus der ursprünglichen Telefonnummer entfernen.
- Verwenden Sie eine Funktion wie
MD5()
oderSHA1()
, um einen Hash zu generieren.
- Fügen Sie eine neue Spalte, z. B.
-
Vorteile:
- Geschwindigkeit: Sobald gehasht, können Sie diese neue
phone_hash
-Spalte indizieren, wodurch MySQL die Suche schnell durchführen kann, ohne eine Tabellenuntersuchung durchführen zu müssen. - Klarheit: Diese Methode führt zu einer strukturierten und wartbaren Lösung, die zukünftige Entwickler leicht verstehen können.
- Geschwindigkeit: Sobald gehasht, können Sie diese neue
2. Verarbeitung auf der Client-Seite
Wenn Ihr Datensatz relativ klein ist und nicht signifikant wachsen soll, könnten Sie in Betracht ziehen, alle Telefonnummern aus der Datenbank in die Clientanwendung abzurufen und die Suche lokal durchzuführen.
-
Schritte:
- Abrufen des gesamten Telefonnummerndatensatzes.
- Anwenden einer Funktion in Ihrer Anwendung zum Herausfiltern nicht-numerischer Zeichen.
- Durchführen der Suche im Speicher.
-
Vor- und Nachteile:
- Dies kann weniger effizient sein als die Verarbeitung auf der Serverseite für größere Datensätze, kann jedoch den Code vereinfachen und die Komplexität der Datenbank reduzieren, wenn Sie zuversichtlich in die Größe des Datensatzes sind.
3. Verwendung von SQL-Replace-Funktionen (nicht empfohlen für größere Datensätze)
Zum Verständnis können Sie auch geschachtelte REPLACE
-Funktionen direkt in Ihren SQL-Abfragen verwenden:
SELECT * FROM people
WHERE
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(phonenumber, '(', ''), ')', ''), '-', ''), ' ', ''), '+', '')
LIKE '123456';
- Wie zuvor angemerkt, kann dieser Ansatz jedoch bei größeren Tabellen langsam sein, da die abgeleiteten Daten nicht indiziert sind und dies zu vollständigen Tabellenuntersuchungen führt.
Fazit
Die beste Lösung zur Suche nach Telefonnummern in MySQL kann je nach spezifischen Anforderungen Ihres Projekts variieren. Während die Verwendung einer gehashten Spalte Klarheit und Leistung bietet, können kleinere Datensätze auch die Verarbeitung auf der Client-Seite wählen. Welchen Weg Sie auch wählen, stellen Sie sicher, dass Sie das zukünftige Wachstum und die Wartungsbedürfnisse berücksichtigen, um Komplikationen für spätere Entwickler zu vermeiden.
Wenn Sie mit Leistungsproblemen oder SQL-Einschränkungen kämpfen, wägen Sie immer sorgfältig Ihre Optionen ab und wählen Sie eine Lösung, die Effizienz mit Wartbarkeit in Einklang bringt.