Frage an join, mysql, php – Verbinden Sie zwei MySQL-Tabellen mit PHP

2

Zum Beispiel habe ich 2 Seiten und 2 MySQL-Tabellen erstellt.

Index.php & citys.php

Städte

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

Bemerkungen

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

Im Moment benutze ich nur den Tischcitys so was:

index.php Verlinkung zucitys.php mit:

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

Undcitys.php Verwenden Sie diesen Code, um die Daten von MySQL anzuzeigen:

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

Bis hierher zeigt sich alles und funktioniert gut.

Ich möchte aber auch die Kommentare auf Seite 2 anzeigen. Daher muss die Abfrage bearbeitet werden, um auch die richtigen Daten aus der Tabelle zu erhaltencomments.

Ich habe verschiedene Beispiele aus dem Internet ausprobiert, die ich selbst bearbeitet habe:

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

Aber nichts geht.

Wer kann helfen?

Bearbeiten!

Die Abfrage von VIPIN JAIN funktioniert, aber es gibt noch ein Problem:

Abfrage:

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

Wenn die Tabelle 'comments' 3 Zeilen enthält, zeigt dieser Code nur die letzten beiden, aber nicht die ersten:

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

Und wenn ich das versuche, zeigt es nur die erste Reihe.

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

Ich weiß nicht, warum die erste Platte in der Schleife verbleibt.

Um diese Frage ein wenig zu klären, können Sie Ihre Tabellendefinitionen posten. Ich bin nicht sicher, wo die Tabellen sich beziehen. Sie haben in beiden Tabellen eine ID, von der ich annehme, dass sie der Primärschlüssel ist. Aber nach allem, was ich sehe, setzen Sie Ihre Städtenamen als Fremdschlüssel für Städte in die Kommentartabelle? Wenn Sie mir die Tabellendefinition zeigen können, kann ich Ihnen helfen. Namphibian
Ich habe gerade eine wirklich lange Frage und Antwort geschrieben, die genau dies abdecktArt von Frage Ich hoffe, dies wird dazu beitragen, zu verdeutlichen, wie Verknüpfungen mit Tabellen funktionieren und wie Informationen aus mehreren Tabellen in Ihrer Datenbank abgerufen werden können. Fluffeh

Deine Antwort

2   die antwort
4

Verwenden Sie diese Abfrage

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

Verwenden Sie leftjoin für diese Art von Arbeit

benutze einfach var_dump ($ row); Um herauszufinden, welche Werte von der Abfrage abgerufen werden. und poste die Ergebnisse hier, damit ich analysieren kann, was passiert Vipin Jain
Hmmm, immer noch ein Problem. Wenn es einen Kommentar zu einer Stadt gibt, funktioniert alles gut. Wenn die Kommentartabelle jedoch keine Aufzeichnungen über eine Stadt enthält, wird die NULL nach Amsterdam angezeigt. Array 0 => String '1' (Länge = 1) 'id' => null 1 => String 'Amsterdam' (Länge = 9) 'city' => null 2 ​​=> String 'NL' (Länge = 2) ' country '=> string' NL '(Länge = 2) 3 => string' 1500000 '(Länge = 7)' population '=> string' 1500000 '(Länge = 7) 4 => null 5 => null 6 => null 'name' => null 7 => null 'comment' => null Und dann gibt <? php echo $ row ["city]?> nichts Maxcim
noch eine sache var_dump die abfrage auch und checke in der phpmyadmin konsole Vipin Jain
Wenn ich dieses <? Php echo $ row ["naam"]?> <br> <? Php echo $ row ["comment"]?> <? Php while ($ row = mysql_fetch_array ($ result)) {echo " <br> <br> "; echo $ row ['naam']; Echo "<br>"; echo $ row ['comment']; }?> Alle Kommentare werden in der richtigen Reihenfolge angezeigt. Ich weiß nicht, ob es der richtige Weg ist, aber es funktioniert bei mir! Danke für die Hilfe. Maxcim
2
<code>select * from citys 
left join comments on comments.city = citys.city 
where citys.id=$id
</code>
Sie können die Verwendung vonLEFT OUTER JOIN. Auf diese Weise erhalten Sie keine Fehlermeldung, wenn keine Übereinstimmungszeile gefunden wurde. user1031030

Verwandte Fragen