1

アップロードされた各画像にコメントを追加できる画像ギャラリーを作成しています。

画像テーブルと一致する外部キーを含むすべてのコメントの db テーブルを作成しました。私のSQL変数は次のようになり、うまく機能しているようです:

$all_comments_one_image_sql="
    SELECT userimage.id, image_id, comment, id, comment_date
    FROM userimage, image_comment
    WHERE image_comment.image_id=userimage.id
    ORDER BY comment_id DESC
";

しかし、すべてのギャラリー画像に対して while 関数を実行している場合、各画像に適切なコメントをどこにどのようにエコーするのでしょうか?

4

3 に答える 3

1

次のような左結合を行う必要があります。

select userimage.id, 
       com.image_id, 
       com.comment, 
       com.id, 
       com.comment_date 
             FROM userimage
                LEFT JOIN image_comment as com ON com.image_id=userimage.id
                    WHERE userimage.id = ?
                    ORDER BY com.id DESC
于 2013-02-28T23:01:05.453 に答える
0

まず、画像コメントを取得するための関数を作成します。

function getImageComments($imageId){
$query = "SELECT userimage.id, image_id, comment, id, comment_date
    FROM userimage
    LEFT JOIN image_comment
    ON image_comment.image_id=userimage.id 
    WHERE image_id = $imageId
    ORDER BY comment_id DESC
";
mysql_query($query);
return mysql_fetch....
}

また、パフォーマンスを向上させるためにクエリをやり直します。

したがって、画像を読み込むときは常に、適切な画像IDを使用して関数を呼び出し、そのコメントを取得します。

于 2013-02-28T23:04:23.613 に答える
0

正しい image_id を確認する必要があります

$all_comments_one_image_sql = "
    SELECT userimage.id, image_id, comment, id, comment_date
    FROM userimage, image_comment
    WHERE image_comment.image_id=userimage.id AND image_id = ?
    ORDER BY comment_id DESC
";

どこ ?コメントを表示するイメージの ID です。pdo を使用する場合は、イメージ ID をバインドするだけで、エスケープを気にする必要はありません。

すべての画像の概要ページがある場合は、キーが画像 ID である連想配列に結果を追加できます。

$comments[] = array();
while ($row = $res->fetch()) {
    if (empty($comments[$row->image_id])) {
        $comments[$row->image_id] = array();
    }

    $comments[$row->image_id][] = $row;
}

コメントを表示するには、$comments[$image_id] が配列である場合、コンテンツを表示するだけです。

于 2013-02-28T23:00:10.020 に答える