How to join data from another table

Asked

Viewed 579 times

8

How to join data from another table.

On the bottom bench 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 he returns to me:

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

How to make me return like this.??

Nome: Paulo  Cidade: Rio de janeiro Status: Ativo
Nome: rafael Cidade: São Paulo Status: inativo
  • Could put the complete structure of the table dados

3 answers

7

In your data table, you need to have city id and status. With these common fields do 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 the FROM list.

Your consultation 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 bank error message appear. Change:

or die ("Erro na consulta");

For:

or die (mysql_error());

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

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 |
+--------+----------------+---------+

2

follows an example of how to do, I know it is right 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";
}   

Browser other questions tagged

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