Pergunta sobre join, mysql, php – Junte duas tabelas mysql com php

2

Por exemplo eu criei 2 páginas e 2 tabelas MySQL.

Index.php & citys.php

cidades

<code> ID     City       Country  Population
 --------------------------------------
 1      Amsterdam     NL     1500000
 2      Rotterdam     NL     900000
 3      Dusseldorf    DE     1800000
</code>

comentários

<code>ID   City        Name   Comment
--------------------------------- 
 1   Dusseldorf  Jack   Great city!
 2   Dusseldorf  John   Beautiful     
 3   Rotterdam   Emy    Love it
</code>

No momento eu só uso a mesacitys como isso:

index.php ligando paracitys.php com:

<code><a href='citys.php?cmd=menu&id=";echo $row['id'];echo "'>
</code>

Ecitys.php use este código para mostrar os dados do MySQL:

<code><?php
include "connect.php";
    if(!isset($cmd)) 
    {
        if($_GET["cmd"]=="menu" || $_POST["cmd"]=="menu")
        {
            if (!isset($_POST["submit"]))
            { 
            $id = $_GET["id"];
            $sql = "SELECT * FROM citys WHERE id=$id";
            $result = mysql_query($sql);        
            $row = mysql_fetch_array($result);
?> 
<?php echo $row["City"] ?>
<br><br>
<?php echo $row["Country"] ?>
<br><br>
<?php echo $row["Population"] ?>
</code>

Até aqui tudo está aparecendo e funcionando bem.

Mas o que eu quero fazer é também mostrar os comentários na página 2. Assim, a consulta deve ser editada para também obter os dados corretos da tabela.comments.

Eu tentei exemplos diferentes da internet que eu editei como:

<code><?php
include "connect.php";
    if(!isset($cmd)) 
    {
        if($_GET["cmd"]=="menu" || $_POST["cmd"]=="menu")
        {
            if (!isset($_POST["submit"]))
            { 
            $id = $_GET["id"];
            $sql = "SELECT citys.*, comments.* FROM citys, comments WHERE citys.id=$id AND comments.city=citys.city";
            $result = mysql_query($sql);        
            $row = mysql_fetch_array($result);
?>
</code>

Mas nada funciona.

Alguém que possa ajudar?

Editar!

A consulta da resposta VIPIN JAIN funciona, mas ainda resta um problema:

Inquerir:

<code>$sql = "SELECT * FROM citys LEFT JOIN comments ON comments.city=citys.city WHERE citys.id=$id";
</code>

Se a tabela 'comentários' tiver 3 linhas, este código mostra apenas os dois últimos, mas não o primeiro:

<code><?php while($row = mysql_fetch_array($result)) { 
    echo "<br><br>";     
    echo $row['name']; 
    echo "<br>"; 
    echo $row['comment'];
} 
?>
</code>

E se eu tentar isso, só mostra a primeira linha.

<code><?php echo $row["name"] ?> 
<br> 
<?php echo $row["comment"] ?>
</code>

Eu não sei porque o primeiro registro é deixado no loop.

Para esclarecer esta questão, você poderia postar suas definições de tabela. Não tenho a certeza se as tabelas estão relacionadas. Você tem um ID em ambas as tabelas, que eu suponho que seja a chave primária. Mas pelo que vejo você está colocando seus nomes de cidades na tabela de comentários como a chave estrangeira para as cidades? Se você puder me mostrar a definição da tabela, eu seria capaz de ajudar. Namphibian
Porque, eu acabei de escrever uma pergunta e uma resposta muito longas que cobrem isso exatamentetipo de pergunta o que espero que ajude a esclarecer como as junções funcionam nas tabelas e como obter informações de várias tabelas em seu banco de dados! Fluffeh

Sua resposta

2   a resposta
2
<code>select * from citys 
left join comments on comments.city = citys.city 
where citys.id=$id
</code>
Você pode avaliar usandoLEFT OUTER JOIN. Isso ajuda você a não receber erros se não conseguir encontrar uma linha de correspondência. user1031030
4

Use esta consulta

<code>$sql = "SELECT * FROM citys LEFT JOIN comments ON comments.city=citys.city WHERE citys.id=$id";
</code>

Use leftjoin para este tipo de trabalho

por favor, aprove a resposta: P Vipin Jain
apenas use var_dump ($ row); Para descobrir quais valores são buscados pela consulta. e postar os resultados aqui para que eu possa analisar o que está acontecendo Vipin Jain
mais uma coisa var_dump a consulta também e verifique no console do phpmyadmin Vipin Jain
Eu mesmo encontrei o problema com var_dump ($ row) ;. Obrigado por toda a ajuda! : D Maxcim

Perguntas relacionadas