sql >> Database >  >> RDS >> Mysql

MySQL-zoekopdracht voor door komma's gescheiden naam

Ja, als er een mogelijkheid is, mag u beide last, first . plaatsen en first last in de database, de betere manier is om uw schema goed te ontwerpen.

Als je ooit merk dat u probeert te zoeken op, of anderszins te manipuleren, onderdelen van kolommen, is uw schema vrijwel zeker verbroken. Het zal vrijwel zeker de prestaties doden.

De juiste manier is om de tabel als volgt te hebben:

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

Dan kunt u de door de gebruiker ingevoerde naam efficiënter splitsen (eenmaal, voordat de query wordt uitgevoerd) in plaats van elke afzonderlijke naam in de database te splitsen.

In het geval dat de database houdt altijd last, first , is het misschien niet echt nodig voor een schemawijziging.

Het probleem dat u in dat geval heeft, is simpelweg het interpreteren van wat de gebruiker heeft ingevoerd.

Een mogelijkheid, hoewel het een prestatiemoordenaar is, is om een ​​like . te doen voor elk afzonderlijk woord. Dus, als de gebruiker pax diablo . heeft ingevoerd , uw resulterende zoekopdracht kan zijn:

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

Op die manier geef je niet zoveel om de bestelling.

Maar gezien mijn hekel aan langzame zoekopdrachten, zou ik proberen dat te vermijden, tenzij het absoluut noodzakelijk is (of je database is relatief klein en zal waarschijnlijk zo blijven).

Er zijn allerlei manieren om dit soort zoekopdrachten te versnellen, zoals:

  • met behulp van de full-text zoekmogelijkheden die uw DBMS heeft.
  • dergelijke mogelijkheden nabootsen door woorden te extraheren en op te slaan tijdens invoeg-/update-triggers (en ze te verwijderen tijdens verwijder-triggers).
  • dat vorige geval, maar ook zorgen voor extra kolommen die worden gebruikt met kleine letters van de huidige kolom (voor snelheid).
  • de gebruiker vertellen dat ze de last, first . moeten gebruiken formulier om te zoeken.
  • proberen de %something% . te vermijden zoekstring zo veel mogelijk (met something% , indexen kunnen nog steeds worden gebruikt).
  • mijn eerder genoemde methode om de naam in twee kolommen te splitsen.


  1. Oracle behandelt lege string als NULL-probleem voor een Java / JPA-programmeur

  2. inner join select (A,B) op A en B vs waar (A,B) in select(A, B) in mysql

  3. Is er een manier om een ​​json-array naar server-side php te sturen en de waarden in een tabel in te voegen?

  4. Kan mijn RDS Oracle-instantie niet verbinden met een PHP-server