Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

andrea cerqueira

IN no mysql

Recommended Posts

costumo usar o IN pra verificar se um valor faz parte de um conjunto de valores separados por vírgula, tipo

WHERE 3 IN (1,2,3,4,5);

a minha dúvida é a seguinte, quero pegar varios valores e ver se algum deles consta nesse outro conjunto de valores, ou seja algo do tipo:

WHERE 3,5,1 IN (1,2,3,4,5);

ou seja onde o 3 ou o 5 ou o 1 conste nesse outro conjunto de valores.

 

pensei em umas formas de fazer isso mas achei meio esdruchulas por isso resolvi perguntar se tem algum comando do mysql que faça isso.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas que tipo de utilização teria para isso

 

não entendi bem a aplicação principalmente porque nunca usei assim mas a principio neste caso seria usando uns OR mas explique melhor

Compartilhar este post


Link para o post
Compartilhar em outros sites

é basicamente assim:

tenho um cadastro de usuário com os campos normais e um campo TIPO de CADASTRO, onde a pessoa seleciona vários ou apenas um tipo, quando ele seleciona varios em vez de criar um registro no BD pra cada tipo eu estou salvando todos os tipos do mesmo usuario em um resgitro só.

por exemplo:

 

id|  nome  |       email      | tipos
1 | Andrea | andrea@gmail.com | 1,2,3

e eu uso esse banco pra enviar email posteriormente, ou seja na hora de selecionar quais pessoas irão receber o email eu seleciono os tipo de cadastro que irão receber, e comparo com os do email feito.

 

se meu email for ser enviado para os tipos 1 e 2 eu tenho que varrer o banco de dados comparando os valores, mas eles estão separados por virgula no banco afim de diminuir o numero de registros no mesmo.

 

entendeu? ou compliquei muito? :)

eu até arrumei uma solução usando arrays em php mesmo, mas achei meio sujo e resolvi postar aqui pra saber se tem como fazer isso pelo mysql mesmo. http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema nisso é que vai contra as regras de normalização por está tendo este trabalho

Compartilhar este post


Link para o post
Compartilhar em outros sites

então a pergunta agora é: http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

 

fazer isso, e na hora da busca usar array em php pra separar tudo:

id|  nome  |       email      | tipos
1 | Andrea | andrea@gmail.com | 1,2,3

ou fazer isso, e na hora da busca dar um IN (1,2,3) Group BY email:

id|  nome  |       email      | tipos
1 | Andrea | andrea@gmail.com |   1
2 | Andrea | andrea@gmail.com |   2
3 | Andrea | andrea@gmail.com |   3

Compartilhar este post


Link para o post
Compartilhar em outros sites

então giesta foi o que eu disse anteriormente.

quero fazer o registro de um usuario uma unica vez pra não ter que repetir registro no banco de dados, mas esse usuario pode ser classificado com vários tipos de cadastro, por isso eu registro no bd só um email dele e os tipos que ele pertence, 1,2,3 por exemplo, e na hora que vou enviar determinando email eu comparo esse 1,2,3 com os tipos do email que pode ser por exemplo 1,2,3,4,5,6.

entendeu?

eu acho que expliquei mais detalhadamente no segundo post.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom , nao eh legal ter um campo multi-valorado como você fez ,tinha q ter uma tabela assim:

 

id | tipo

1 |1

1 |2

1 |3

2 |1

 

e assim vai

 

e essa consulta ia ser feita nela

Compartilhar este post


Link para o post
Compartilhar em outros sites

com certeza terá um ganho considerável tanto na montagem das querys quanto na sua performance

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.