sql >> Databáze >  >> RDS >> Mysql

Bojuji s databází telefonních čísel MySQL

To je velmi zvláštní, sám jsem se s tímto problémem za posledních 15 let potýkal mnohokrát a obecně jsem přišel se strukturami, které oddělují kódy oblastí, kódy zemí a čísla do samostatných polí atd. Ale při čtení vaší otázky se objevilo jiné řešení do mé hlavy, vyžaduje to samostatné pole, i když to pro vás nemusí být vhodné.

Mohli byste mít samostatné pole nazvané reverse_phone_number, které automaticky vyplní DB engine, pak když lidé vyhledávají, jednoduše obrátí vyhledávací řetězec a použijte indexované reverzní pole pouze s % na konci podobného řetězce, čímž umožníte použití index.

V závislosti na vašem DB enginu můžete být schopni vytvořit index založený na uživatelsky definované funkci, která udělá opak za vás, aniž byste potřebovali další pole.

V některých zemích, např. ve Spojeném království můžete mít problém s úvodními nulami. Britské telefonní číslo je reprezentováno jako (předvolba) (telefonní číslo), např. 01634 511098, je-li toto zmezinárodněno, odstraní se úvodní nula kódu oblasti a přidá se mezinárodní předvolba (+ nebo 00) a kód země (44). Výsledkem je mezinárodní telefonní číslo +441634511098. Žádný uživatel hledající 0163451109 by nenašel telefonní číslo, pokud by bylo zadáno v mezinárodním formátu. Tento problém můžete překonat odstraněním úvodních nul z vyhledávacího řetězce.

UPRAVIT Na základě návrhů od Ollie Jonese byste měli uložit číslo tak, jak je zadalo uživatelem, a poté z čísla odstranit úvodní nuly, interpunkci a mezery, než je obrátit a uložit do obráceného pole. Pak jednoduše použijte stejný algoritmus k odstranění hledaného řetězce před obrácením, najděte záznam a poté uživateli zobrazte původně zadané číslo.




  1. Speciální znaky v PHP / MySQL

  2. Spočítat všechny záznamy, které neexistují, do jiné tabulky - SQL Query

  3. VMware CPU Hot Plug vNUMA Effects na SQL Server

  4. Připojení FlySpeed ​​SQL Query k Salesforce.com