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

(Resolvido) Problema com select


Eder Cuer

Pergunta

Eae galera, acabei de me cadastrar :rolleyes:

To com um problema que ta me deixando doido da vida, já tive ajuda de uns amigos mas nada resolveu, vou explicar:

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

É um sistema de transportadora, onde um usuario escolhe a cidade origem e cidade destino, então o sistema deveria retornar as transportadoras que atendam a essas duas cidades.

Meu sistema tem as seguintes tabelas:

mrh                    mrh_cidade           mrh_transportadora
- cod_mrh            - fk cod_cid           - fk cod_transp    
- nome                - fk cod_mrh          - fk cod_mrh
- fk cod_estado
Fiz dois select, esse com inner join:
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 ( 13, 14 ) 
GROUP BY cod_transp
E esse:
SELECT t.nome, t.cod_transp
FROM transportadora t, cidade c, mrh, mrh_transportadora mt, mrh_cidade mc
WHERE c.cod_cid = mc.cod_cid
AND mrh.cod_mrh = mc.cod_mrh
AND t.cod_transp = mt.cod_transp
AND mrh.cod_mrh = mt.cod_mrh
AND c.cod_cid
IN (
'13', '14'
)

No inicio achei que tava certo, mas ta acontecendo o seguinte, vamos supor:

A transportadora A, B atendem as cidades de codigo 14, 15. A transportadora C atende 14, 15 e 33.

Se eu faço o select com 13 e 14, me aparece todas as transportadoras.

Se eu faço o select com 15 e 33, me aparece só uma transportadora.

Mas se faço o select com 14 e 33 me aparece todas as transportadoras, mas no caso do meu filtro não deveria aparecer nenhum, porque nenhuma transportadora atende a essas duas cidades.

Galera desculpa se ta grande aqui, tentei explicar da melhor forma possivel.

Quem puder me ajudar eu agradeço.

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

exemplo:

SELECT * FROM shirts WHERE color ='red' OR color ='white' OR color='blue'

a construção mais eficiente seria:

SELECT * FROM shirts WHERE color IN ('red','white','blue')

mas se eu quisesse apenas a cor vermelha e a azul

SELECT * FROM shirts WHERE color ='red' AND color='blue'

ou veja o manual de referencia

http://dev.mysql.com/doc/refman/4.1/pt/mysql-indexes.html

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Salve Jhonas, vlw por responder..

Eu já tentei do jeito que você me disse, e ele sempre me retorna vazio os resultados

Exemplo:

SELECT DISTINCT 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 = 14 AND mrh_cidade.cod_cid = 15

Link para o comentário
Compartilhar em outros sites

  • 0

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 = 14 AND mrh_cidade.cod_cid = 15
ou
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 = '14' AND mrh_cidade.cod_cid = '15'
ou ainda
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 = 14 OR mrh_cidade.cod_cid = 15

OBS: Utilize o MySQL-Front ... com ele é possivel testar a sua instrução select, antes de usar no programa

http://www.google.com.br/search?hl=pt-BR&a...j3j1l8l0.frgbld.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

A transportadora A, B atendem as cidades de codigo 14, 15. A transportadora C atende 14, 15 e 33.

eu não entendi bem as suas tabelas, mas se nas tabelas mrh_transportadora e mrh_cidade, voce tem o id e o resto das informações que precisa, não tem porque não funcionar

como falei, utilize o MYSQL-Front e voce verá que é muito facil contruir as sentenças SQL

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

vou te dar uma dica simples para poder achar o problema

faça a select com o join entre as tabelas fazendo a referencia pelo campo comum

deve trazer varios registros

depois acrescente a clausula where para somente um codigo da cidade

ainda deve trazer varios registros

depois filtre ainda mais, acrescentando outro codigo da cidade

seguindo passo a passo voce descobrira onde esta o problema

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Eae Jhonas, consegui resolver com muita ajuda.

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

Brigadão pela ajuda que você deu.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

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