Ir para conteúdo

POWERED BY:

Arquivado

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

Eder Cuer

[Resolvido] select

Recommended Posts

Eae galera, estou tentando fazer um filtro, mas estou me enrolando na parte do select, vou tentar explicar.

 

É um sistema de transportadora, onde um usuario escolhe o estado origem, cidade origem, estado destino e cidade destino.

 

Meu sistema tem as seguintes tabelas:

 

mrh (microrregiões).

- codigo e nome da microrregião.

 

mrh_cidade (tabela gerada com o relacionamento de cidade com mrh).

- nessa tabela tenho o codigo da mrh e codigo da cidade.

 

mrh_estado (relacionamento de mrh com estado).

- nessa tabela tenho o codigo da mrh e do estado

 

mrh_tranportadora (relacionamento entre transportadora e mrh).

- nessa tabela tenho o codigo da mrh e da transportadora.

 

 

Na hora de fazer o select tinha que ser feito uma busca das transportadoras que atendam as cidades selecionadas.

No meu sistema eu liguei todas as cidades com as microrregiões porque na hora do cadastro o usuário escolhe quais microrregiões a transportadora atende, assim ja engloba varias cidades.

 

Não sei se fui claro, to tentando faz um bom tempo fazer esse select e não estou conseguindo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então galera consegui resolver em partes

 

SELECT transportadora.cod_transp, nome
FROM mrh_transportadora
INNER JOIN transportadora ON transportadora.cod_transp = mrh_transportadora.cod_transp
INNER JOIN mrh_cidade ON mrh_cidade.cod_mrh = mrh_transportadora.cod_mrh
WHERE mrh_cidade.cod_cid
IN ( 14, 15 ) 
GROUP BY cod_transp

 

Percebi que o select não ta usando os dois codigos, exemplo:

Eu tenho que selecionar origem e destino. Vamos supor que eu seleciono 15 e 50.

Nenhuma transportadora atende a cidade 50, mas todas atendem a 15, então ele retorna todas as transportadoras mesmo assim, o certo seria selecionar apenas as transportadoras que atendem as duas cidades.

Mas se eu seleciono a cidade 15 e 33, ai me aparece só uma transportadora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que o join deve ser revisto

 

INNER JOIN mrh_cidade ON mrh_cidade.cod_mrh = mrh_transportadora.cod_mrh

 

o join deve ser pela código da cidade, não conheço o modela mais creio que falta alguma coisa aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver Motta, e realmente tava faltando coisa, vlw pelo toque

 

Ficou assim:

SELECT t2.cod_transp,
      t2.nome
FROM   (SELECT t1.cod_transp,
              t1.nome
       FROM   transportadora t1
              INNER JOIN mrh_transportadora mt1
                ON mt1.cod_transp = t1.cod_transp
              INNER JOIN mrh_cidade mc1
                ON mc1.cod_mrh = mt1.cod_mrh
       WHERE  mc1.cod_cid = $Origem) t2
      INNER JOIN mrh_transportadora mt2
        ON mt2.cod_transp = t2.cod_transp
      INNER JOIN mrh_cidade mc2
        ON mc2.cod_mrh = mt2.cod_mrh
WHERE  mc2.cod_cid = $Destino

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.