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

Pesquisar matriz de postagem no valor da coluna separada por vírgulas


Solução 1:

Como @Jens comentou, é um design de banco de dados ruim armazenar valores como CSV. não pode escrever um esquema ou dar qualquer sugestão significativa.

Solução 2:

Use find_in_set função.
SELECT id FROM table
WHERE FIND_IN_SET(searchFilterHere, filter_data)

Solução 3:

Você pode usar o LIKE operador. (Alguns membros provavelmente vão me matar por sugerir isso, mas se você não quiser alterar o design do seu banco de dados - esta é uma opção criativa).

Vamos verificar o seguinte código:
SELECT id FROM table WHERE filter_data LIKE '%2,%'

O problema é que ele retornará o id de um campo com 22, na coluna do filter_data. Portanto, você terá que alterar os dados nessa coluna para que , aparecerá também como o primeiro e o último caractere. Por exemplo:
id | filter_data   |
---|---------------
1  |,2,3,45,67,4,  |
2  |,2,3,55,33,5,7,|

E agora você pode fazer o seguinte:
SELECT id FROM table WHERE filter_data LIKE '%,2,%'

Se você tiver vários "filtros de pesquisa", poderá combinar o LIKE s com um OU operador.