How do you join data from another table

8

How to merge data from another table.

On the downstairs bank I have 3 tables:

dados:    id, nome, end, tel... etc.... 
cidades:  id, nome_cidade
status:   id, nome_status


$sql = "SELECT * FROM dados ";
$resultado = mysql_query($sql) or die ("Erro na consulta");
while ($linha = mysql_fetch_assoc($resultado)) {

$nome = $linha["nome"];      //aqui gravo o Nome Fulano
$cidade = $linha["cidade"];  //aqui gravo o id da Cidade
$status = $linha["status"];  //aqui gravo o id do status

}

Then it returns me:

Nome: Paulo  na cidade: 1  e status: 2
Nome: Rafael na cidade: 1  e status: 2

How do you make me return like this. ??

Nome: Paulo  Cidade: Rio de janeiro Status: Ativo
Nome: rafael Cidade: São Paulo Status: inativo
    
asked by anonymous 26.01.2015 / 02:21

3 answers

5

You need to make a JOIN in your tables.

Example:

SELECT d.nome, c.nome_cidade AS cidade, s.nome_status AS status FROM dados d
  JOIN cidades c ON d.cidade = c.id
  JOIN status s ON d.status = s.id

Will return:

+--------+----------------+---------+
|  NOME  |     CIDADE     | STATUS  |
+--------+----------------+---------+
| Paulo  | Rio de Janeiro | Ativo   |
| Rafael | São Paulo      | Inativo |
+--------+----------------+---------+
    
26.01.2015 / 02:35
7

In your data table, you need to have the city and status id. With these fields in common, make a JOIN , if the name of the fields are equal it is necessary to give an alias for each one or just put the correct field (description) in FROM list.

Your query should look like this:

$sql = "SELECT d.*, c.nome_cidade, s.nome_status FROM dados as d
        INNER JOIN cidades as c ON d.id_cidade = c.id
        INNER JOIN status as s ON d.id_status = s.id  ";

$resultado = mysql_query($sql) or die(mysql_error());

while ($linha = mysql_fetch_assoc($resultado)) {
   $nome = $linha["nome"];
   $cidade = $linha["nome_cidade"];
   $status = $linha["nome_status"];    
   echo "Nome: $nome  Cidade: $cidade Status: $status";  
}

Avoid putting error messages that do not help at all, when testing, let the error message appear. Change:

or die ("Erro na consulta");

By:

or die (mysql_error());

There are different types of joins one for each situation, see these differences in question: What is the difference between inner join and outer join?

    
26.01.2015 / 02:39
2

Here's an example of how to do it, I know it's OK to use INNER JOIN:

$sql = "SELECT  c.nome, d.nome_cidade, c.nome_status FROM cidades c, dados d, inativo i WHERE d.cidade = c.id AND d.status = i.id ";
$resultado = mysql_query($sql) or die ("Erro na consulta");
while ($linha = mysql_fetch_assoc($resultado)) {

    $nome = $linha["nome"];      //aqui gravo o Nome Fulano
    $cidade = $linha["nome_cidade"];  //aqui gravo o id da Cidade
    $status = $linha["nome_status"];  //aqui gravo o id do status

    echo "Nome: $nome  Cidade: $cidade Status: $status";
}   
    
26.01.2015 / 02:34