Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kämpfe mit einer MySQL-Datenbank mit Telefonnummern

Das ist sehr seltsam, ich habe in den letzten 15 Jahren selbst oft mit diesem Problem gekämpft und im Allgemeinen Strukturen gefunden, die Vorwahlen, Ländervorwahlen und Nummern in separate Felder usw. trennen. Aber beim Lesen Ihrer Frage ist gerade eine andere Lösung aufgetaucht in meinen Kopf, erfordert es ein separates Feld, ist also möglicherweise nicht für Sie geeignet.

Sie könnten ein separates Feld namens reverse_phone_number haben, dieses automatisch von der DB-Engine ausfüllen lassen, dann kehren Sie bei der Personensuche einfach die Suchzeichenfolge um und verwenden Sie das indizierte Reverse-Feld mit nur einem % am Ende der ähnlichen Zeichenfolge, wodurch die Verwendung von ermöglicht wird index.

Abhängig von Ihrer DB-Engine können Sie möglicherweise einen Index basierend auf einer benutzerdefinierten Funktion erstellen, die für Sie das Gegenteil bewirkt und die Notwendigkeit eines zusätzlichen Felds überflüssig macht.

In einigen Ländern, z. Großbritannien, haben Sie möglicherweise ein Problem mit führenden Nullen. Eine britische Telefonnummer wird als (Vorwahl)(Telefonnummer) dargestellt, z. 01634 511098, bei der Internationalisierung wird die führende Null der Vorwahl entfernt und die internationale Vorwahl (+ oder 00) und die Landesvorwahl (44) hinzugefügt. Daraus ergibt sich eine internationale Telefonnummer von +441634511098. Jeder Benutzer, der nach 0163451109 sucht, findet die Telefonnummer nicht, wenn sie im internationalisierten Format eingegeben wird. Sie können dieses Problem umgehen, indem Sie führende Nullen aus der Suchzeichenfolge entfernen.

BEARBEITEN Basierend auf den Vorschlägen von Ollie Jones sollten Sie die Nummer so speichern, wie sie vom Benutzer eingegeben wurde, und dann führende Nullen, Satzzeichen und Leerzeichen aus der Nummer entfernen, bevor Sie sie umkehren und im umgekehrten Feld speichern. Verwenden Sie dann einfach denselben Algorithmus, um die Suchzeichenfolge vor dem Umkehren zu entfernen, den Datensatz zu finden und dem Benutzer dann die ursprünglich eingegebene Nummer wieder anzuzeigen.