Вопрос по mysql, php – Соедините две таблицы mysql с помощью php

2

Например, я создал 2 страницы и 2 таблицы MySQL.

Index.php & Амп;citys.php

citys

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

comments

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

На данный момент я использую только таблицуcitys как это:

index.php ссылка наcitys.php с:

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

А такжеcitys.php используйте этот код для отображения данных из 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>

Пока здесь все не появляется и работает нормально.

Но я хочу также показать комментарии на странице 2. Таким образом, запрос должен быть отредактирован, чтобы получить правильные данные из таблицы.comments.

Я пробовал разные примеры из интернета, которые я редактировал, например:

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

Но ничего не работает.

Кто-нибудь, кто может помочь?

Edit!

Запрос от ответа VIPIN JAIN работает, но осталась одна проблема:

Запрос:

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

Если в таблице «комментарии» имеет 3 строки, этот код показывает только последние две, но не первую:

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

И если я попробую это, он показывает только первый ряд.

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

Я не знаю, почему первая запись оставлена в цикле.

Чтобы прояснить этот вопрос, не могли бы вы опубликовать определения таблиц. Я не уверен, что таблицы связаны. У вас есть идентификатор в обеих таблицах, который я предполагаю, является первичным ключом. Но из того, что я вижу, вы вводите названия городов в таблицу комментариев в качестве внешнего ключа для городов? Если вы можете показать мне определение таблицы таблицы, я смогу помочь. Namphibian
Почему я только что написал очень длинный вопрос и ответ, который охватывает именно это своего рода вопрос который, я надеюсь, поможет уточнить, как объединения работают с таблицами и как получить информацию из нескольких таблиц в вашей базе данных! Fluffeh

Ваш Ответ

2   ответа
4

Используйте этот запрос

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

Используйте левое соединение для этого типа работы

Запрос работает, но есть еще одна проблема: если в таблице "comments" есть 3 строки, этот код показывает только последние две, но не первую: <? Php while ($ row = mysql_fetch_array ($ result)) {echo "< уш> <br> "; echo $ row ['name']; эхо "<br>"; echo $ row ['comment']; }?> И если я попробую <? Php echo $ row ["name"]?> <br> <? Php echo $ row ["comment"]?>, То будет показана только первая строка. Maxcim
Возможно, вы должны использовать 2 запроса для вышеуказанного, так как объединения заставят программу занять больше, чем требуется памяти. Так что для лучшего варианта перейдите к нескольким запросам. т.е. как для таблицы городов, так и для таблицы комментариев. Vipin Jain
пожалуйста, подтвердите ответ: P Vipin Jain
Если я использую этот <? Php echo $ row ["naam"]?> <br> <? Php echo $ row ["comment"]?> <? Php while ($ row = mysql_fetch_array ($ result)) {echo "на <br>"; echo $ row ['naam']; эхо "<br>"; echo $ row ['comment']; }?> показывает все комментарии в правильном порядке. Я не знаю, если это правильный путь, но это работает для меня! Спасибо за помощь. Maxcim
У меня есть еще один вопрос по поводу запроса. Похоже, что поле "город" не загружается после запроса. Пример: <? Php echo $ row ["country"]?> Указывает страну, <? Php echo $ row ["city]?> Ничего не дает. Maxcim
2
select * from citys 
left join comments on comments.city = citys.city 
where citys.id=$id
Ты можешь заниматься, используяLEFT OUTER JOIN. Это поможет вам не получить ошибку, если не удалось найти строку соответствия. user1031030

Похожие вопросы