sql >> Base de Datos >  >> RDS >> Mysql

Consulta de búsqueda de MySQL para nombre separado por comas

Sí, si existe la posibilidad, puede poner ambos last, first y first last en la base de datos, la mejor manera es diseñar su esquema correctamente.

Si alguna vez se encuentra tratando de buscar o manipular de otro modo partes de columnas, es casi seguro que su esquema está roto. Es casi seguro que matará el rendimiento.

La forma correcta es tener la tabla así:

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

Luego, puede dividir de manera más eficiente el nombre ingresado por el usuario (una vez, antes de ejecutar la consulta) en lugar de intentar dividir cada nombre en la base de datos.

En el caso de que la base de datos siempre contiene last, first , puede que en realidad no sea necesario para un cambio de esquema.

El problema que tiene en ese caso es simplemente interpretar lo que el usuario ingresó.

Una posibilidad, aunque es un asesino del rendimiento, es hacer un like para cada palabra separada. Entonces, si el usuario ingresó pax diablo , su consulta resultante podría ser:

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

De esa manera, no te importa tanto el pedido.

Sin embargo, dado que no me gustan las consultas lentas, intentaría evitarlas a menos que sea absolutamente necesario (o que su base de datos sea relativamente pequeña y es probable que siga así).

Hay todo tipo de formas de acelerar este tipo de consultas, como:

  • usando cualquier capacidad de búsqueda de texto completo que tenga su DBMS.
  • emular dichas habilidades extrayendo y almacenando palabras durante los activadores de inserción/actualización (y eliminándolas durante los activadores de eliminación).
  • ese caso anterior, pero también asegurando que se usen columnas adicionales con valores en minúsculas de la columna actual (para velocidad).
  • diciéndole al usuario que necesita usar el last, first formulario de búsqueda.
  • tratando de evitar el %something% cadena de búsqueda tanto como sea posible (con something% , todavía se pueden usar índices).
  • mi método mencionado anteriormente "dividir el nombre en dos columnas".