• 0
Sign in to follow this  
Steven Tyler

AND multiplo

Question

Oi pessoal,

Eu estou precisando fazer o seguinte.........

tenho uma tabela principal, onde tenho os campos

TBL CADASTROS

ds_codigo

ds_nome

e uma auxiliar

TBL SEGMENTO

ds_codigo FK

ds_codigo_segmento

No formulário de pesquisa do meu site, o usuário pode escolher mais de um segmento, os segmentos estão com checkbox no formulário.

eu preciso fazer com que só retornem registros que tem os segmentos escolhidos no formulário.

exemplo, eu tenho cadastrado o seguinte registro com 3 segmentos:

CADASTRO

ds_codigo ds_nome

1000 steven

SEGMENTOS

ds_codigo ds_codigo_segmento

1000 21

1000 22

1000 23

Eu preciso fazer uma query, eu cheguei até aqui:

SELECT * FROM cadastros c

LEFT JOIN segmentos s ON s.ds_codigo = c.ds_codigo

AND s.ds_codigo_segmento=21 AND s.ds_codigo_segmento=22 AND s.ds_codigo_segmento=23

isto está errado, pois nunca um registro será 21,22 e 23 ao mesmo tempo. ou a linha vem com 21, ou 22, ou 23.

Tentei usar IN

SELECT * FROM cadastros c

LEFT JOIN segmentos s ON s.ds_codigo = c.ds_codigo

AND s.ds_codigo_segmento IN (21,22,23)

Também não da certo, porque se o usuário no formulário escolher por exemplo o 21 e 22, e também escolher um 25, ele retorna as 2 linhas referentes ao 21 e 22, e eu QUERO QUE RETORNE LINHAS SOMENTE SE O USUÁRIO ESCOLHER SEGMENTO CORRETO.

Se o cadastro tem 21 22 e 23 de segmentos.......somente estes podem ser escolhidos, se escolher 21 22 e 25, ERRO !! não retorna nada...........se escolher 21 e 22, OK retorna............se escolher 21 22 e 23, OK retorna.........se escolher 21 e 25 ERRO !! não retorna !! Ou seja, apesar de 21 estar correto, o 25 não está, por isso não deve ter retorno !!

Entenderam? Eu preciso resolver isso com urgência !!!!

Obrigado

Steven Tyler

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Primeiro valide os segmentes selecionados.

Se a validação retornar correto você vai em frente com as querys, caso a validação retorne erro você já da a msg de erro e já para a aplicação ali.

Se você quer que faça a busca somente se todos estiverem corretos o in não funciona até porque o "IN" é a clausula "or" abreviada.

Agora outra opção seria você na clausula where colocar "cadastro = 1000 and (segmento in (21,23,25))" num importa se existe o 25 ou não... ele vai aceitar só as que existir no cadastro 1000

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this