Ir para conteúdo
Fórum Script Brasil
  • 0

AND multiplo


Steven Tyler

Pergunta

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

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 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

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...