PHP - 使用SQL查询嵌套while循环

时间:2016-03-10 14:35:37

标签: php mysql

如何使用SQL查询进行嵌套SQL循环?它只从表diskuze返回1行,从表odpovedi返回所有行。感谢

  • diskuze :( ID_diskuze(PK),autor_diskuze,predmet_diskuze,text_diskuze,datum_cas_diskuze)

  • odpovedi :( ID_diskuze(PK-FK),hloubka_odpovedi,autor_odpovedi,text_odpovedi,datum_cas_odpovedi)

PHP:

<?php $sql = "SELECT ID_diskuze, autor_diskuze, predmet_diskuze, text_diskuze, datum_cas_diskuze
                     FROM diskuze";
$result = mysql_query($sql);

while ($row = mysql_fetch_array($result)) {

    $ID_diskuze = $row['ID_diskuze'];
    $autor_diskuze = $row['autor_diskuze'];
    $predmet_diskuze = $row['predmet_diskuze'];
    $text_diskuze = $row['text_diskuze'];
    $datum_cas_diskuze = $row['datum_cas_diskuze']; ?>

    <p>
        <span style="color:rgb(204,0,0); font-weight:bold; font-size: 20px">OD: <?php echo $autor_diskuze ?></span>
        <span style="color:rgb(0,0,0); font-size: 16px"> (<?php echo $datum_cas_diskuze ?>)</span><br/>
        <span style="color:rgb(0,0,204); font-weight:bold; font-size: 16px">TITULEK: <?php echo $predmet_diskuze ?></span><br/>
        <span style="font-weight:bold;">NAPSAL: </span><?php echo $text_diskuze ?>
    </p>


    <?php $sql = "SELECT hloubka_odpovedi, autor_odpovedi, text_odpovedi, datum_cas_odpovedi
                       FROM odpovedi
                       WHERE ID_diskuze = $ID_diskuze
                       ORDER BY hloubka_odpovedi ASC";

    $result = mysql_query($sql);

    while ($row = mysql_fetch_array($result)) {

        $hloubka_odpovedi = $row['hloubka_odpovedi'];
        $autor_odpovedi = $row['autor_odpovedi'];
        $text_odpovedi = $row['text_odpovedi'];
        $datum_cas_odpovedi = $row['datum_cas_odpovedi'];
        $odpovidajici = $autor_odpovedi . " " . $datum_cas_odpovedi . " - " . $text_odpovedi; ?>

        <p>
            <span style="font-weight:bold;">REAKCE:</span> <?php echo $odpovidajici ?>
        </p>
        <?php
    }
}

?> 

1 个答案:

答案 0 :(得分:0)

我相信您不需要循环,并使用JOIN转换您的两部分查询

SELECT o.hloubka_odpovedi, o.autor_odpovedi, o.text_odpovedi, o.datum_cas_odpovedi,
i.ID_diskuze, i.autor_diskuze, i.predmet_diskuze, i.text_diskuze, i.datum_cas_diskuze
                FROM odpovedi o JOIN diskuze i
                ON o.ID_diskuze = i.ID_diskuze
                ORDER BY o.hloubka_odpovedi;