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

Como pesquisar um valor separado por vírgula

Solução de curto prazo


Use a função FIND_IN_SET :
WHERE FIND_IN_SET('Queensland', csv_column)

...porque usar LIKE com curingas em cada extremidade é arriscado, dependendo de quanto/pouco correspondências (e também garante uma varredura de tabela). O desempenho de LIKE com curingas em ambos os lados está no mesmo nível do REGEXP - isso significa ruim.

Solução de longo prazo


Não armazene valores separados por vírgulas -- use uma relação muitos-para-muitos adequada, envolvendo três tabelas:

Coisas

  • thing_id (chave primária)

Estados australianos

  • State_id (chave primária)
  • Nome_estado

Things_to_Auz_States

  • thing_id (chave primária, chave estrangeira para THINGS tabela)
  • State_id (chave primária, chave estrangeira para AUSTRALIAN_STATES tabela)

Você precisará de JOINs para obter dados das três tabelas, mas se quiser saber quantos estão associados a um estado específico ou a dois estados específicos, esse é o modelo adequado.