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:

    1. Fügen Sie eine neue Spalte, z. B. phone_hash, zu Ihrer bestehenden Tabelle hinzu.
    2. Füllen Sie diese Spalte aus, indem Sie alle Sonderzeichen aus der ursprünglichen Telefonnummer entfernen.
    3. Verwenden Sie eine Funktion wie MD5() oder SHA1(), um einen Hash zu generieren.
  • 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.

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:

    1. Abrufen des gesamten Telefonnummerndatensatzes.
    2. Anwenden einer Funktion in Ihrer Anwendung zum Herausfiltern nicht-numerischer Zeichen.
    3. 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.