Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta de pesquisa do MySQL para nome separado por vírgula


Sim, se houver a possibilidade, você pode colocar os dois last, first e first last no banco de dados, a melhor maneira é projetar seu esquema corretamente.

Se você nunca encontrar-se tentando pesquisar ou manipular partes de colunas, seu esquema quase certamente está quebrado. Quase certamente matará o desempenho.

A maneira correta é ter a tabela assim:
T1  FirstName  LastName
==  =========  ========
 1  Pax        Diablo
 2  Bob        Smith
 3  George     Jones

Então você pode dividir de forma mais eficiente o nome inserido pelo usuário (uma vez, antes de executar a consulta) em vez de tentar dividir cada nome no banco de dados.

No caso em que o banco de dados sempre mantém last, first , pode não ser realmente necessário para uma alteração de esquema.

O problema que você tem nesse caso é simplesmente interpretar o que o usuário digitou.

Uma possibilidade, embora seja um assassino de desempenho, é fazer um like para cada palavra separada. Então, se o usuário digitou pax diablo , sua consulta resultante pode ser:
select T1 from mytable
    where T2 like '%pax%'
      and T2 like '%diablo%'

Dessa forma, você não se importa tanto com o pedido.

No entanto, dada a minha antipatia por consultas lentas, eu tentaria evitar isso, a menos que seja absolutamente necessário (ou seu banco de dados é relativamente pequeno e provavelmente permanecerá assim).

Existem várias maneiras de acelerar esses tipos de consultas, como:
  • usando quaisquer recursos de pesquisa de texto completo que seu DBMS tenha.
  • emulando essas habilidades extraindo e armazenando palavras durante a ativação de inserir/atualizar (e removendo-as durante a ativação de exclusão).
  • no caso anterior, mas também garantindo colunas extras usadas com valores em letras minúsculas da coluna atual (para velocidade).
  • dizendo ao usuário que ele precisa usar o last, first formulário para pesquisa.
  • tentando evitar o %something% string de pesquisa tanto quanto possível (com something% , os índices ainda podem ser usados).
  • meu método "dividir o nome em duas colunas" mencionado anteriormente.