How to make a query with data from two related tables?

1

I have this case down:

 (Tabelas)
 cidades:   id, nome_cidade,local
 +--------+----------------+---------------+
 |  id    |  nome_cidade   |    Local      |
 +--------+----------------+---------------+
 |   1    | Rio de Janeiro |    Centro     |
 |   2    | São Paulo      |    Centro     |
 +--------+----------------+---------------+

 (dados)
 +--------+----------------+---------------+
 |  NOME  |     origem     |    destino    |
 +--------+----------------+---------------+
 | Paulo  |        1       |       2       |
 | Rafael |        2       |       1       |
 +--------+----------------+---------------+

I would like it to return like this:

 +--------+----------------+---------------+
 |  NOME  |     origem     |    destino    |
 +--------+----------------+---------------+
 | Paulo  | Rio de Janeiro | São Paulo     |
 | Rafael | São Paulo      | Rio de Janiro |
 +--------+----------------+---------------+

Getting the ids from the cities table and returning them with their names. I'm using this code below:

 SELECT d.*, c.nome_cidade  FROM dados d
 JOIN cidades c ON d.cidade = c.id
 JOIN cidades s ON d.cidade2 = s.id

In this case you are repeating me like this

 +--------+----------------+---------------+
 |   NOME |     origem     |    destino    |
 +--------+----------------+---------------+
 | Paulo  | Rio de Janeiro | Rio de Janiro |
 | Rafael | São Paulo      | São Paulo     |
 +--------+----------------+---------------+

What am I doing wrong?

I tried it, too, but it did not work:

 $sql = "SELECT * FROM dados 
 INNER JOIN cidades ON (dados.cidade = cidade.id) 
 INNER JOIN cidades ON (dados.cidade2 = cidade.id)


 $cidade1 = $linha["cidade"];
 $cidade2 = $linha["cidade2"];";
    
asked by anonymous 31.01.2015 / 01:57

2 answers

2

You have followed the right path in your query but you are only selecting the city name from source ( c.nome_cidade ).

You can do this:

 SELECT d.nome, c1.nome_cidade AS origem, c2.nome_cidade AS destino  FROM dados d
  JOIN cidades c1 ON d.origem = c1.id 
  JOIN cidades c2 ON d.destino = c2.id
    
31.01.2015 / 02:45
0

I'm not sure where you're confused, but the query should be this:

SELECT
  dados.nome,
  origem.nome_cidade as origem,
  destino.nome_cidade as destino
FROM dados
  INNER JOIN cidades origem
  ON origem.id = dados.origem
  INNER JOIN cidades destino
  ON destino.id = dados.destino
ORDER BY dados.id

link

    
31.01.2015 / 02:45