Mysql
 sql >> Base de données >  >> RDS >> Mysql

Luttant avec une base de données MySQL de numéros de téléphone

C'est très bizarre, j'ai moi-même lutté avec ce problème à plusieurs reprises, au cours des 15 dernières années et j'ai généralement trouvé des structures qui séparent les indicatifs régionaux, les indicatifs de pays et les numéros dans des champs séparés, etc. Mais en lisant votre question, une autre solution vient de surgir dans ma tête, cela nécessite un champ séparé, mais cela peut ne pas vous convenir.

Vous pouvez avoir un champ séparé appelé reverse_phone_number, le remplir automatiquement par le moteur de base de données, puis lorsque les personnes recherchent, inversez simplement la chaîne de recherche et utilisez le champ inversé indexé avec juste un % à la fin de la chaîne similaire, permettant ainsi l'utilisation du indice.

En fonction de votre moteur de base de données, vous pourrez peut-être créer un index basé sur une fonction définie par l'utilisateur qui fera l'inverse pour vous, évitant ainsi d'avoir besoin d'un champ supplémentaire.

Dans certains pays, par ex. au Royaume-Uni, vous pouvez avoir un problème avec les zéros non significatifs. Un numéro de téléphone britannique est représenté par (indicatif régional) (numéro de téléphone), par ex. 01634 511098, lorsqu'il est internationalisé, le zéro initial de l'indicatif régional est supprimé et l'indicatif international (+ ou 00) et l'indicatif du pays (44) sont ajoutés. Cela se traduit par un numéro de téléphone international +441634511098. Tout utilisateur recherchant 0163451109 ne trouverait pas le numéro de téléphone s'il était saisi au format internationalisé. Vous pouvez résoudre ce problème en supprimant les zéros non significatifs de la chaîne de recherche.

MODIFIER Sur la base des suggestions d'Ollie Jones, vous devez stocker le numéro tel qu'il a été saisi par l'utilisateur, puis supprimer les zéros non significatifs, la ponctuation et les espaces blancs du numéro avant de l'inverser et de le stocker dans le champ inversé. Ensuite, utilisez simplement le même algorithme pour supprimer la chaîne de recherche avant d'inverser, trouvez l'enregistrement, puis affichez le numéro entré à l'origine à l'utilisateur.