How to query data from two related tables?

Asked

Viewed 1,333 times

1

I got 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’d like you to return to me like this:

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

Taking the city table ids and returning 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’re telling me so

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

What must I be doing wrong?

I tried that way too but I couldn’t:

 $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"];";
  • When you say you’re repeating you speak of the names of the columns CIDADE and CIDADE 2 of the mourning?

  • Sorry already fix la.. It’s Origin and Destination Column

2 answers

2


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

You can do it like 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

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

http://sqlfiddle.com/#! 2/7806a2/2

Browser other questions tagged

You are not signed in. Login or sign up in order to post.