sql >> Database teknologi >  >> RDS >> Mysql

MySQL-søgeforespørgsel efter kommasepareret navn

Ja, hvis der er en mulighed, kan du sætte begge last, first og first last ind i databasen, den bedre måde er at designe dit skema korrekt.

Hvis du nogensinde finde dig selv i at prøve at søge på eller på anden måde manipulere dele af kolonner, er dit skema næsten helt sikkert brudt. Det vil næsten helt sikkert dræbe ydeevnen.

Den korrekte måde er at have tabellen således:

T1  FirstName  LastName
==  =========  ========
 1  Pax        Diablo
 2  Bob        Smith
 3  George     Jones

Så kan du mere effektivt opdele det brugerindtastede navn (en gang, før du kører forespørgslen) i stedet for at prøve at opdele hvert enkelt navn i databasen.

I det tilfælde, hvor databasen indeholder altid last, first , er det muligvis ikke nødvendigt for en skemaændring.

Det problem, du har i så fald, er simpelthen at fortolke, hvad brugeren har indtastet.

En mulighed, selvom det er en præstationsdræber, er at lave en like for hvert særskilt ord. Så hvis brugeren indtastede pax diablo , kan din resulterende forespørgsel være:

select T1 from mytable
    where T2 like '%pax%'
      and T2 like '%diablo%'

På den måde er du ligeglad med ordren.

Men i betragtning af min modvilje mod langsomme forespørgsler, ville jeg prøve at undgå det, medmindre det er absolut nødvendigt (eller din database er relativt lille og sandsynligvis forbliver sådan).

Der er alle mulige måder at fremskynde den slags forespørgsler på, såsom:

  • ved at bruge de fuldtekstsøgningsmuligheder, som dit DBMS har.
  • emulere sådanne evner ved at udtrække og gemme ord under indsættelses-/opdateringsudløsere (og fjerne dem under sletteudløsere).
  • det tidligere tilfælde, men også at sikre ekstra kolonner, der bruges med små bogstaver i den aktuelle kolonne (for hastighed).
  • fortælle brugeren, at de skal bruge last, first formular til søgning.
  • forsøger at undgå %something% søgestreng så meget som muligt (med something% , indekser kan stadig bruges).
  • min tidligere nævnte "opdel navnet i to kolonner"-metode.


  1. Slet data fra afhængige tabeller

  2. MYSQL, PHP Indsæt i flere tabeller i databasen

  3. Gør WHERE ID IN med en underforespørgsel, som returnerer en streng af ID'er

  4. Tilføjelse og adgang til knap-id'er i en PHP-genereret tabel