Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Problema com select


Eder Cuer

Question

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 to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Guest
This topic is now closed to further replies.


  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...