2

こんにちは、データベース テーブル「shout_out」にクエリを実行しようとしています。while ループ中に、「convers_id」列が no_reply から変更されたかどうかを確認する if ステートメントがあります。ある場合は、別のクエリを実行して、同じ「convers_id」列を持つshout_out_replyテーブルからすべての行を取得します。Facebookの「壁」と同様のレイアウトを取得しようとしています。ある人がコメントを作成し、他の人がそのコメントに返信して、元のコメントの下に返信することができます。

mysqli_query($dbc, $query_shout_out_reply) が失敗したことがわかります。しかし、同じ「convers_id」を持つ返信があります

$query_shout_out = "SELECT * FROM shout_out WHERE sent_to = '$username' ";
$shout_out_query = mysqli_query($dbc, $query_shout_out);

if (mysqli_num_rows($shout_out_query) != 0) {
    while ($row = mysqli_fetch_array($shout_out_query)) {
        echo '<td class="shout_out_display" width="550">';
        echo $row['message'] . ' <br/><br/> From ' . $row['sent_by'] . ' at ' . $row['date_sent'];
        echo '</td></tr>';
        echo $row['convers_id'];
        if ($row['convers_id'] != "no_reply") {
            $query_shout_out_reply = "SELECT * FROM shout_out_reply WHERE convers_id = " . $row['convers_id'];
            $shout_out_reply_query = mysqli_query($dbc, $query_shout_out_reply);

            while ($reply_row = mysqli_fetch_array($shout_out_reply_query)) {
                echo ' <tr width="550"><td width="125" > &nbsp </td>';
                echo '<td width="425"  class="shout_out_reply_display">';
                echo $reply_row['message'] . '<br/><br/>Reply From ' . $reply_row['sent_by'] . ' at ' . $reply_row['date_sent'];
                echo '</td></tr>';
            }
        }

    }
}
4

2 に答える 2

1
SELECT * FROM shout_out AS so LEFT JOIN shout_out_reply AS sor ON sor.convers_id = so.convers_id WHERE so.sent_to = '$username' AND so.convers_id != 'no_reply'

ここで重要なのは、SQL JOIN ステートメントを使用することです。1 つのステートメントで両方のテーブルの結果が得られます。...その後、ループを通過する必要はありません。これらすべてのSQLリクエストを作成します。

于 2011-12-15T21:49:30.343 に答える
0

結合や複雑なクエリを簡単に作成できるような構造のテーブルを設計する必要があります。まず、 がどのように機能し、いつ使用する必要があるかを理解する必要があります。これについてはグーグルをチェックしてください。

于 2011-12-15T21:52:12.243 に答える