sql >> Databasteknik >  >> RDS >> Mysql

Kämpar med en MySQL-databas med telefonnummer

Det här är väldigt konstigt, jag har själv kämpat med det här problemet många gånger under de senaste 15 åren och har generellt kommit på strukturer som separerar riktnummer, landskoder och nummer i separata fält etc. Men när jag läste din fråga dök en annan lösning upp. i mitt huvud kräver det ett separat fält men det kanske inte är lämpligt för dig.

Du kan ha ett separat fält som heter reverse_phone_number, fyll i detta automatiskt av DB-motorn. När folk söker vänder du helt enkelt om söksträngen och använder det indexerade omvända fältet med bara en % i slutet av den liknande strängen, vilket tillåter användningen av index.

Beroende på din DB-motor kanske du kan skapa ett index baserat på en användardefinierad funktion som gör det omvända för dig och undviker behovet av ett extra fält.

I vissa länder, t.ex. i Storbritannien kan du ha problem med inledande nollor. Ett brittiskt telefonnummer representeras som (riktnummer) (telefonnummer), t.ex. 01634 511098, när detta är internationaliserat tas den inledande nollan av riktnumret bort och det internationella numret (+ eller 00) och landsnumret (44) läggs till. Detta resulterar i ett internationellt telefonnummer på +441634511098. Alla användare som söker efter 0163451109 skulle inte hitta telefonnumret om det angavs i internationaliserat format. Du kan lösa det här problemet genom att ta bort inledande nollor från söksträngen.

REDIGERA Baserat på förslag från Ollie Jones bör du lagra numret som angett av användaren och sedan ta bort inledande nollor, skiljetecken och blanksteg från numret innan du backar och lagrar i det omvända fältet. Använd sedan helt enkelt samma algoritm för att ta bort söksträngen innan du backar, hitta posten och visa sedan det ursprungligen angivna numret för användaren.




  1. Rankning av tävlingsresultat av bilder med 5-stjärniga betyg

  2. Varför genererar EF SQL-frågor med onödiga nollkontroller?

  3. Kunde inte hitta den lagrade proceduren 'dbo.aspnet_CheckSchemaVersion'

  4. Hur får jag det aktuella året med SQL på Oracle?